]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-89653: Add assertions to unicodeobject.h functions (#91800)
authorVictor Stinner <vstinner@python.org>
Thu, 21 Apr 2022 21:26:25 +0000 (23:26 +0200)
committerGitHub <noreply@github.com>
Thu, 21 Apr 2022 21:26:25 +0000 (23:26 +0200)
Include/cpython/unicodeobject.h

index 8cc9885756037d2c715aa7e3a0960bb9ede3596b..5d050fd0b7563d8ef4f536a07034fe943adecb7e 100644 (file)
@@ -314,6 +314,7 @@ static inline void* _PyUnicode_COMPACT_DATA(PyObject *op) {
 }
 
 static inline void* _PyUnicode_NONCOMPACT_DATA(PyObject *op) {
+    assert(!PyUnicode_IS_COMPACT(op));
     void *data = _PyUnicodeObject_CAST(op)->data.any;
     assert(data != NULL);
     return data;
@@ -354,13 +355,16 @@ static inline void PyUnicode_WRITE(unsigned int kind, void *data,
                                    Py_ssize_t index, Py_UCS4 value)
 {
     if (kind == PyUnicode_1BYTE_KIND) {
+        assert(value <= 0xffU);
         ((Py_UCS1 *)data)[index] = (Py_UCS1)value;
     }
     else if (kind == PyUnicode_2BYTE_KIND) {
+        assert(value <= 0xffffU);
         ((Py_UCS2 *)data)[index] = (Py_UCS2)value;
     }
     else {
         assert(kind == PyUnicode_4BYTE_KIND);
+        assert(value <= 0x10ffffU);
         ((Py_UCS4 *)data)[index] = value;
     }
 }
@@ -378,6 +382,7 @@ static inline Py_UCS4 PyUnicode_READ(unsigned int kind,
     if (kind == PyUnicode_2BYTE_KIND) {
         return ((const Py_UCS2 *)data)[index];
     }
+    assert(kind == PyUnicode_4BYTE_KIND);
     return ((const Py_UCS4 *)data)[index];
 }
 #define PyUnicode_READ(kind, data, index) \
@@ -397,6 +402,7 @@ static inline Py_UCS4 PyUnicode_READ_CHAR(PyObject *unicode, Py_ssize_t index)
     if (kind == PyUnicode_2BYTE_KIND) {
         return PyUnicode_2BYTE_DATA(unicode)[index];
     }
+    assert(kind == PyUnicode_4BYTE_KIND);
     return PyUnicode_4BYTE_DATA(unicode)[index];
 }
 #define PyUnicode_READ_CHAR(unicode, index) \
@@ -419,6 +425,7 @@ static inline Py_UCS4 PyUnicode_MAX_CHAR_VALUE(PyObject *op)
     if (kind == PyUnicode_2BYTE_KIND) {
         return 0xffffU;
     }
+    assert(kind == PyUnicode_4BYTE_KIND);
     return 0x10ffffU;
 }
 #define PyUnicode_MAX_CHAR_VALUE(op) \