From: Serhiy Storchaka Date: Wed, 28 Dec 2016 07:54:22 +0000 (+0200) Subject: Issue #29073: bytearray formatting no longer truncates on first null byte. X-Git-Tag: v3.5.3rc1~20 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=c9ad8b7a2384f063dc0a99c652dccd9e7616e14e;p=thirdparty%2FPython%2Fcpython.git Issue #29073: bytearray formatting no longer truncates on first null byte. --- diff --git a/Lib/test/test_format.py b/Lib/test/test_format.py index 0e83a69bff05..565bb79d7ee2 100644 --- a/Lib/test/test_format.py +++ b/Lib/test/test_format.py @@ -388,6 +388,13 @@ class FormatTest(unittest.TestCase): else: raise TestFailed('"%*d"%(maxsize, -127) should fail') + def test_nul(self): + # test the null character + testcommon("a\0b", (), 'a\0b') + testcommon("a%cb", (0,), 'a\0b') + testformat("a%sb", ('c\0d',), 'ac\0db') + testcommon(b"a%sb", (b'c\0d',), b'ac\0db') + def test_non_ascii(self): testformat("\u20ac=%f", (1.0,), "\u20ac=1.000000") diff --git a/Misc/NEWS b/Misc/NEWS index d11136d78e82..82f147d6dbd8 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -10,6 +10,8 @@ Release date: TBA Core and Builtins ----------------- +- Issue #29073: bytearray formatting no longer truncates on first null byte. + - Issue #28932: Do not include if it does not exist. - Issue #28147: Fix a memory leak in split-table dictionaries: setattr() diff --git a/Objects/bytearrayobject.c b/Objects/bytearrayobject.c index 6d4c6a1b0e68..3fad6d80b59e 100644 --- a/Objects/bytearrayobject.c +++ b/Objects/bytearrayobject.c @@ -283,13 +283,15 @@ bytearray_format(PyByteArrayObject *self, PyObject *args) { PyObject *bytes_in, *bytes_out, *res; char *bytestring; + Py_ssize_t bytesize; if (self == NULL || !PyByteArray_Check(self) || args == NULL) { PyErr_BadInternalCall(); return NULL; } bytestring = PyByteArray_AS_STRING(self); - bytes_in = PyBytes_FromString(bytestring); + bytesize = PyByteArray_GET_SIZE(self); + bytes_in = PyBytes_FromStringAndSize(bytestring, bytesize); if (bytes_in == NULL) return NULL; bytes_out = _PyBytes_Format(bytes_in, args);