PyUnicode_FromKindAndData() fails with a ValueError if size < 0
authorVictor Stinner <victor.stinner@haypocalc.com>
Tue, 22 Nov 2011 00:29:14 +0000 (01:29 +0100)
committerVictor Stinner <victor.stinner@haypocalc.com>
Tue, 22 Nov 2011 00:29:14 +0000 (01:29 +0100)
Objects/unicodeobject.c

index 30a1377add99b9609c374e6dde575f73c30ecb71..7f079e789972aa9d47561c52d4db0d76d6477cd5 100644 (file)
@@ -1906,6 +1906,10 @@ _PyUnicode_FromUCS4(const Py_UCS4 *u, Py_ssize_t size)
 PyObject*
 PyUnicode_FromKindAndData(int kind, const void *buffer, Py_ssize_t size)
 {
+    if (size < 0) {
+        PyErr_SetString(PyExc_ValueError, "size must be positive");
+        return NULL;
+    }
     switch(kind) {
     case PyUnicode_1BYTE_KIND:
         return _PyUnicode_FromUCS1(buffer, size);
@@ -1914,7 +1918,6 @@ PyUnicode_FromKindAndData(int kind, const void *buffer, Py_ssize_t size)
     case PyUnicode_4BYTE_KIND:
         return _PyUnicode_FromUCS4(buffer, size);
     default:
-        assert(0 && "invalid kind");
         PyErr_SetString(PyExc_SystemError, "invalid kind");
         return NULL;
     }