Commit da0eca42 authored by Victor Stinner's avatar Victor Stinner

Issue #8966: If a ctypes structure field is an array of c_char, convert its

value to bytes instead of str (as done for c_char and c_char_p).
parent cc0cfd35
...@@ -30,8 +30,8 @@ class BytesTest(unittest.TestCase): ...@@ -30,8 +30,8 @@ class BytesTest(unittest.TestCase):
X("abc") X("abc")
x = X(b"abc") x = X(b"abc")
self.assertEqual(x.a, "abc") self.assertEqual(x.a, b"abc")
self.assertEqual(type(x.a), str) self.assertEqual(type(x.a), bytes)
def test_struct_W(self): def test_struct_W(self):
class X(Structure): class X(Structure):
......
...@@ -209,9 +209,9 @@ class StructureTestCase(unittest.TestCase): ...@@ -209,9 +209,9 @@ class StructureTestCase(unittest.TestCase):
self.assertRaises(TypeError, Person, "Name", "HI") self.assertRaises(TypeError, Person, "Name", "HI")
# short enough # short enough
self.assertEqual(Person("12345", 5).name, "12345") self.assertEqual(Person("12345", 5).name, b"12345")
# exact fit # exact fit
self.assertEqual(Person("123456", 5).name, "123456") self.assertEqual(Person("123456", 5).name, b"123456")
# too long # too long
self.assertRaises(ValueError, Person, "1234567", 5) self.assertRaises(ValueError, Person, "1234567", 5)
...@@ -269,9 +269,9 @@ class StructureTestCase(unittest.TestCase): ...@@ -269,9 +269,9 @@ class StructureTestCase(unittest.TestCase):
p = Person("Someone", ("1234", "5678"), 5) p = Person("Someone", ("1234", "5678"), 5)
self.assertEqual(p.name, "Someone") self.assertEqual(p.name, b"Someone")
self.assertEqual(p.phone.areacode, "1234") self.assertEqual(p.phone.areacode, b"1234")
self.assertEqual(p.phone.number, "5678") self.assertEqual(p.phone.number, b"5678")
self.assertEqual(p.age, 5) self.assertEqual(p.age, 5)
def test_structures_with_wchar(self): def test_structures_with_wchar(self):
......
...@@ -421,6 +421,9 @@ C-API ...@@ -421,6 +421,9 @@ C-API
Library Library
------- -------
- Issue #8966: If a ctypes structure field is an array of c_char, convert its
value to bytes instead of str (as done for c_char and c_char_p).
- Issue #8188: Comparisons between Decimal and Fraction objects are - Issue #8188: Comparisons between Decimal and Fraction objects are
now permitted, returning a result based on the exact numerical now permitted, returning a result based on the exact numerical
values of the operands. This builds on issue #2531, which allowed values of the operands. This builds on issue #2531, which allowed
......
...@@ -1333,7 +1333,7 @@ s_get(void *ptr, Py_ssize_t size) ...@@ -1333,7 +1333,7 @@ s_get(void *ptr, Py_ssize_t size)
break; break;
} }
return PyUnicode_FromStringAndSize((char *)ptr, (Py_ssize_t)i); return PyBytes_FromStringAndSize((char *)ptr, (Py_ssize_t)i);
} }
static PyObject * static PyObject *
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment