This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author serhiy.storchaka
Recipients amaury.forgeotdarc, belopolsky, martin.panter, meador.inge, mfxmfx, pitrou, serhiy.storchaka, skrah, theller
Date 2014-08-07.08:33:50
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <5478631.EEcZy4Ri0L@raxxla>
In-reply-to <1407348132.04.0.846672711198.issue10803@psf.upfronthosting.co.za>
Content
Here are things which support bytes instances only:

1. Constructor and setter of the "value" attribute of NUL terminated char 
buffer.

>>> p = create_string_buffer(b"Hello")
>>> p.value
b'Hello'
>>> p.raw
b'Hello\x00'
>>> p.value = b'Bye'
>>> p.value
b'Bye'
>>> p.raw
b'Bye\x00o\x00'
>>> create_string_buffer(bytearray(b"Hello"))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/serhiy/py/cpython-3.4/Lib/ctypes/__init__.py", line 63, in 
create_string_buffer
    raise TypeError(init)
TypeError: bytearray(b'Hello')
>>> p.value = bytearray(b'Hi')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: bytes expected instead of bytearray instance

But setter of the "raw" attribute accepts arbitrary bytes-like objects.

>>> p.raw = bytearray(b'Hi')
>>> p.raw
b'Hie\x00o\x00'

The patch adds support of bytearray here. It would be not so easy to add 
support for arbitrary bytes-like objects, and due to NUL-terminating it can be 
confused. I even not sure that support of bytearray is needed here.

2. Constructor of NUL terminated wchar buffer (create_unicode_buffer). Actually 
this doesn't work. Bytes argument is accepted, but then rejected in internal 
setting function. This is a bug, bytes should be removed here.

3. c_wchar_p.from_param() accepts bytes argument, but then reject it in 
internal function. This is a bug, bytes should be removed here.

4. c_void_p.from_param() accepts bytes and bytearray arguments, but then 
reject bytearray in internal function. This is a bug, either bytearray should 
be rejected here, or support of bytearray should be added in internal function 
(very easy, the patch does this). Adding support of arbitrary bytes-like 
objects is more complicated.

5. c_char_p.from_param() accepts bytes argument. Adding support for bytearray 
or arbitrary bytes-like objects has same complexity as in 
c_void_p.from_param().

6. Bytes arguments of call_function(), call_cdeclfunction() and 
CopyComPointer() are implicitly converted to pointers. It is easy to add 
support of bytearray, and more complicated for arbitrary bytes-like objects.
History
Date User Action Args
2014-08-07 08:33:52serhiy.storchakasetrecipients: + serhiy.storchaka, theller, amaury.forgeotdarc, belopolsky, pitrou, mfxmfx, skrah, meador.inge, martin.panter
2014-08-07 08:33:52serhiy.storchakalinkissue10803 messages
2014-08-07 08:33:50serhiy.storchakacreate