From: Victor Stinner Date: Mon, 21 Nov 2011 13:31:41 +0000 (+0100) Subject: Issue #13441: _PyUnicode_CheckConsistency() dumps the string if the maximum X-Git-Tag: v3.3.0a1~773 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=da29cc36aa2c7dcc3932ea1d83e261aa940ccdb4;p=python Issue #13441: _PyUnicode_CheckConsistency() dumps the string if the maximum character is bigger than U+10FFFF and locale.localeconv() dumps the string before decoding it. Temporary hack to debug the issue #13441. --- diff --git a/Modules/_localemodule.c b/Modules/_localemodule.c index 9bba1b39cf..236442f05b 100644 --- a/Modules/_localemodule.c +++ b/Modules/_localemodule.c @@ -79,6 +79,23 @@ str2uni(const char* s) return res2; } +#ifdef Py_DEBUG +void +dump_str(const char *name, const char *value) +{ + size_t i, len = strlen(value); + printf("Decode localeconv() %s: {", name); + for (i=0; is); \ + x = str2uni(l->s); \ + if (!x) goto failed;\ + PyDict_SetItemString(result, #s, x);\ + Py_XDECREF(x) +#else #define RESULT_STRING(s)\ x = str2uni(l->s); \ if (!x) goto failed;\ PyDict_SetItemString(result, #s, x);\ Py_XDECREF(x) +#endif #define RESULT_INT(i)\ x = PyLong_FromLong(l->i);\ diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c index 6798ef8145..6307a983e5 100644 --- a/Objects/unicodeobject.c +++ b/Objects/unicodeobject.c @@ -391,6 +391,19 @@ _PyUnicode_CheckConsistency(PyObject *op, int check_content) if (ch > maxchar) maxchar = ch; } + if (maxchar > 0x10FFFF) { + printf("Invalid Unicode string! {"); + for (i=0; i < ascii->length; i++) + { + Py_UCS4 ch = PyUnicode_READ(kind, data, i); + if (i) + printf(", U+%04x", ch); + else + printf("U+%04x", ch); + } + printf("} (len=%u)\n", ascii->length); + abort(); + } if (kind == PyUnicode_1BYTE_KIND) { if (ascii->state.ascii == 0) { assert(maxchar >= 128);