(original) (raw)
changeset: 74702:056f5cc8885d user: Victor Stinner victor.stinner@haypocalc.com date: Wed Feb 01 00:22:23 2012 +0100 files: Include/unicodeobject.h Python/formatter_unicode.c description: Issue #13706: Add assertions to detect bugs earlier diff -r b74a77fee744 -r 056f5cc8885d Include/unicodeobject.h --- a/Include/unicodeobject.h Tue Jan 31 17:02:10 2012 -0500 +++ b/Include/unicodeobject.h Wed Feb 01 00:22:23 2012 +0100 @@ -499,14 +499,17 @@ 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); \ } \ diff -r b74a77fee744 -r 056f5cc8885d Python/formatter_unicode.c --- a/Python/formatter_unicode.c Tue Jan 31 17:02:10 2012 -0500 +++ b/Python/formatter_unicode.c Wed Feb 01 00:22:23 2012 +0100 @@ -559,8 +559,9 @@ 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 @@ 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 @@ Py_CLEAR(result); done: + assert(!result || _PyUnicode_CheckConsistency(result, 1)); return result; } @@ -759,7 +762,7 @@ 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 @@ done: Py_XDECREF(tmp); + assert(!result || _PyUnicode_CheckConsistency(result, 1)); return result; } @@ -1036,6 +1040,7 @@ done: PyMem_Free(buf); Py_DECREF(unicode_tmp); + assert(!result || _PyUnicode_CheckConsistency(result, 1)); return result; } @@ -1270,6 +1275,7 @@ PyMem_Free(im_buf); Py_XDECREF(re_unicode_tmp); Py_XDECREF(im_unicode_tmp); + assert(!result || _PyUnicode_CheckConsistency(result, 1)); return result; } /victor.stinner@haypocalc.com