bpo-39593: Add test on ctypes cfield.c s_set() (GH-18424)

This commit is contained in:
Hai Shi 2020-06-02 00:54:18 +08:00 committed by GitHub
parent e9684fac5a
commit a97011b9b8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 11 additions and 1 deletions

View File

@ -46,6 +46,14 @@ class StructFieldsTestCase(unittest.TestCase):
Y._fields_ = []
self.assertRaises(AttributeError, setattr, X, "_fields_", [])
def test_5(self):
class X(Structure):
_fields_ = (("char", c_char * 5),)
x = X(b'#' * 5)
x.char = b'a\0b\0'
self.assertEqual(bytes(x), b'a\x00###')
# __set__ and __get__ should raise a TypeError in case their self
# argument is not a ctype instance.
def test___set__(self):

View File

@ -1263,7 +1263,9 @@ s_set(void *ptr, PyObject *value, Py_ssize_t length)
}
data = PyBytes_AS_STRING(value);
size = strlen(data); /* XXX Why not Py_SIZE(value)? */
// bpo-39593: Use strlen() to truncate the string at the first null character.
size = strlen(data);
if (size < length) {
/* This will copy the terminating NUL character
* if there is space for it.