diff options
author | Victor Stinner <vstinner@python.org> | 2023-10-20 15:59:29 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-10-20 15:59:29 (GMT) |
commit | d731579bfb9a497cfb0076cb6b221058a20088fe (patch) | |
tree | 63eb8f9b8dfb7af9a5de6d4499ab375b80f208d4 /Objects/typeobject.c | |
parent | 59ea0f523e155ac1a471cd292b41a76241fccd36 (diff) | |
download | cpython-d731579bfb9a497cfb0076cb6b221058a20088fe.zip cpython-d731579bfb9a497cfb0076cb6b221058a20088fe.tar.gz cpython-d731579bfb9a497cfb0076cb6b221058a20088fe.tar.bz2 |
gh-111089: PyUnicode_AsUTF8() now raises on embedded NUL (#111091)
* PyUnicode_AsUTF8() now raises an exception if the string contains
embedded null characters.
* Update related C API tests (test_capi.test_unicode).
* type_new_set_doc() uses PyUnicode_AsUTF8AndSize() to silently
truncate doc containing null bytes.
Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
Diffstat (limited to 'Objects/typeobject.c')
-rw-r--r-- | Objects/typeobject.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/Objects/typeobject.c b/Objects/typeobject.c index 3261a14..2508569 100644 --- a/Objects/typeobject.c +++ b/Objects/typeobject.c @@ -3499,13 +3499,14 @@ type_new_set_doc(PyTypeObject *type) return 0; } - const char *doc_str = PyUnicode_AsUTF8(doc); + Py_ssize_t doc_size; + const char *doc_str = PyUnicode_AsUTF8AndSize(doc, &doc_size); if (doc_str == NULL) { return -1; } // Silently truncate the docstring if it contains a null byte - Py_ssize_t size = strlen(doc_str) + 1; + Py_ssize_t size = doc_size + 1; char *tp_doc = (char *)PyObject_Malloc(size); if (tp_doc == NULL) { PyErr_NoMemory(); |