diff options
author | Victor Stinner <vstinner@wyplay.com> | 2011-10-03 12:42:39 (GMT) |
---|---|---|
committer | Victor Stinner <vstinner@wyplay.com> | 2011-10-03 12:42:39 (GMT) |
commit | 85041a54bd2712775fe152807ee3e76dea83b15a (patch) | |
tree | 5d55023ceb387a52a01374c02192ec20fdcf9d04 | |
parent | 3cf4637e4e15fb79bc741be37524199ed21c64b2 (diff) | |
download | cpython-85041a54bd2712775fe152807ee3e76dea83b15a.zip cpython-85041a54bd2712775fe152807ee3e76dea83b15a.tar.gz cpython-85041a54bd2712775fe152807ee3e76dea83b15a.tar.bz2 |
_PyUnicode_CheckConsistency() checks utf8 field consistency
-rw-r--r-- | Include/unicodeobject.h | 2 | ||||
-rw-r--r-- | Objects/unicodeobject.c | 6 |
2 files changed, 8 insertions, 0 deletions
diff --git a/Include/unicodeobject.h b/Include/unicodeobject.h index d7c9fa7..1b6d1c9 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 c3e1f29..1d90f69 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; |