From: Victor Stinner Date: Mon, 3 Oct 2011 12:42:39 +0000 (+0200) Subject: _PyUnicode_CheckConsistency() checks utf8 field consistency X-Git-Tag: v3.3.0a1~1365 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=85041a54bd2712775fe152807ee3e76dea83b15a;p=thirdparty%2FPython%2Fcpython.git _PyUnicode_CheckConsistency() checks utf8 field consistency --- diff --git a/Include/unicodeobject.h b/Include/unicodeobject.h index d7c9fa773c76..1b6d1c94e127 100644 --- a/Include/unicodeobject.h +++ b/Include/unicodeobject.h @@ -225,6 +225,7 @@ typedef struct { * compact = 1 * ready = 1 * ascii = 0 + * utf8 != data - string created by the legacy API (not ready): @@ -246,6 +247,7 @@ typedef struct { * compact = 0 * ready = 1 * data.any is not NULL + * utf8 = data if ascii is 1 String created by the legacy API becomes ready when calling PyUnicode_READY(). diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c index c3e1f290e123..1d90f69be06d 100644 --- a/Objects/unicodeobject.c +++ b/Objects/unicodeobject.c @@ -293,11 +293,13 @@ _PyUnicode_CheckConsistency(void *op) assert(ascii->state.ready == 1); } else if (ascii->state.compact == 1) { + PyCompactUnicodeObject *compact = (PyCompactUnicodeObject *)op; assert(kind == PyUnicode_1BYTE_KIND || kind == PyUnicode_2BYTE_KIND || kind == PyUnicode_4BYTE_KIND); assert(ascii->state.ascii == 0); assert(ascii->state.ready == 1); + assert (compact->utf8 != (void*)(compact + 1)); } else { PyCompactUnicodeObject *compact = (PyCompactUnicodeObject *)op; PyUnicodeObject *unicode = (PyUnicodeObject *)op; @@ -318,6 +320,10 @@ _PyUnicode_CheckConsistency(void *op) assert(ascii->state.compact == 0); assert(ascii->state.ready == 1); assert(unicode->data.any != NULL); + if (ascii->state.ascii) + assert (compact->utf8 == unicode->data.any); + else + assert (compact->utf8 != unicode->data.any); } } return 1;