]> granicus.if.org Git - python/commitdiff
Issue #13706: Add assertions to detect bugs earlier
authorVictor Stinner <victor.stinner@haypocalc.com>
Tue, 31 Jan 2012 23:22:23 +0000 (00:22 +0100)
committerVictor Stinner <victor.stinner@haypocalc.com>
Tue, 31 Jan 2012 23:22:23 +0000 (00:22 +0100)
Include/unicodeobject.h
Python/formatter_unicode.c

index c706fc2d7661a3cb60e9a0649355b68287bda411..6d580f482129b24d6db6ef1bace2cfe712d5d711 100644 (file)
@@ -499,14 +499,17 @@ enum PyUnicode_Kind {
     do { \
         switch ((kind)) { \
         case PyUnicode_1BYTE_KIND: { \
+            assert(value <= 0xff); \
             ((Py_UCS1 *)(data))[(index)] = (Py_UCS1)(value); \
             break; \
         } \
         case PyUnicode_2BYTE_KIND: { \
+            assert(value <= 0xffff); \
             ((Py_UCS2 *)(data))[(index)] = (Py_UCS2)(value); \
             break; \
         } \
         default: { \
+            assert(value <= 0x10ffff); \
             assert((kind) == PyUnicode_4BYTE_KIND); \
             ((Py_UCS4 *)(data))[(index)] = (Py_UCS4)(value); \
         } \
index eee99134adc083cbe6e88fcfcdddbae6b752816b..ed716a5b971747b78b0db243d21c4512c0196d49 100644 (file)
@@ -559,8 +559,9 @@ fill_number(PyObject *out, Py_ssize_t pos, const NumberFieldWidths *spec,
             Py_ssize_t t;
             for (t = 0; t < spec->n_prefix; t++) {
                 Py_UCS4 c = PyUnicode_READ(kind, data, pos + t);
+                c = Py_TOUPPER(c);
                 assert (c <= 127);
-                PyUnicode_WRITE(kind, data, pos + t, Py_TOUPPER(c));
+                PyUnicode_WRITE(kind, data, pos + t, c);
             }
         }
         pos += spec->n_prefix;
@@ -603,11 +604,12 @@ fill_number(PyObject *out, Py_ssize_t pos, const NumberFieldWidths *spec,
         Py_ssize_t t;
         for (t = 0; t < spec->n_grouped_digits; t++) {
             Py_UCS4 c = PyUnicode_READ(kind, data, pos + t);
+            c = Py_TOUPPER(c);
             if (c > 127) {
                 PyErr_SetString(PyExc_SystemError, "non-ascii grouped digit");
                 return -1;
             }
-            PyUnicode_WRITE(kind, data, pos + t, Py_TOUPPER(c));
+            PyUnicode_WRITE(kind, data, pos + t, c);
         }
     }
     pos += spec->n_grouped_digits;
@@ -733,6 +735,7 @@ format_string_internal(PyObject *value, const InternalFormatSpec *format)
         Py_CLEAR(result);
 
 done:
+    assert(!result || _PyUnicode_CheckConsistency(result, 1));
     return result;
 }
 
@@ -759,7 +762,7 @@ format_int_or_long_internal(PyObject *value, const InternalFormatSpec *format,
                                    produces non-digits */
     Py_ssize_t n_prefix = 0;   /* Count of prefix chars, (e.g., '0x') */
     Py_ssize_t n_total;
-    Py_ssize_t prefix;
+    Py_ssize_t prefix = 0;
     NumberFieldWidths spec;
     long x;
     int err;
@@ -894,6 +897,7 @@ format_int_or_long_internal(PyObject *value, const InternalFormatSpec *format,
 
 done:
     Py_XDECREF(tmp);
+    assert(!result || _PyUnicode_CheckConsistency(result, 1));
     return result;
 }
 
@@ -1036,6 +1040,7 @@ format_float_internal(PyObject *value,
 done:
     PyMem_Free(buf);
     Py_DECREF(unicode_tmp);
+    assert(!result || _PyUnicode_CheckConsistency(result, 1));
     return result;
 }
 
@@ -1270,6 +1275,7 @@ done:
     PyMem_Free(im_buf);
     Py_XDECREF(re_unicode_tmp);
     Py_XDECREF(im_unicode_tmp);
+    assert(!result || _PyUnicode_CheckConsistency(result, 1));
     return result;
 }