mirror of
https://github.com/python/cpython.git
synced 2025-09-09 18:32:22 +00:00
_PyUnicode_CheckConsistency() checks utf8 field consistency
This commit is contained in:
parent
3cf4637e4e
commit
85041a54bd
2 changed files with 8 additions and 0 deletions
|
@ -225,6 +225,7 @@ typedef struct {
|
||||||
* compact = 1
|
* compact = 1
|
||||||
* ready = 1
|
* ready = 1
|
||||||
* ascii = 0
|
* ascii = 0
|
||||||
|
* utf8 != data
|
||||||
|
|
||||||
- string created by the legacy API (not ready):
|
- string created by the legacy API (not ready):
|
||||||
|
|
||||||
|
@ -246,6 +247,7 @@ typedef struct {
|
||||||
* compact = 0
|
* compact = 0
|
||||||
* ready = 1
|
* ready = 1
|
||||||
* data.any is not NULL
|
* data.any is not NULL
|
||||||
|
* utf8 = data if ascii is 1
|
||||||
|
|
||||||
String created by the legacy API becomes ready when calling
|
String created by the legacy API becomes ready when calling
|
||||||
PyUnicode_READY().
|
PyUnicode_READY().
|
||||||
|
|
|
@ -293,11 +293,13 @@ _PyUnicode_CheckConsistency(void *op)
|
||||||
assert(ascii->state.ready == 1);
|
assert(ascii->state.ready == 1);
|
||||||
}
|
}
|
||||||
else if (ascii->state.compact == 1) {
|
else if (ascii->state.compact == 1) {
|
||||||
|
PyCompactUnicodeObject *compact = (PyCompactUnicodeObject *)op;
|
||||||
assert(kind == PyUnicode_1BYTE_KIND
|
assert(kind == PyUnicode_1BYTE_KIND
|
||||||
|| kind == PyUnicode_2BYTE_KIND
|
|| kind == PyUnicode_2BYTE_KIND
|
||||||
|| kind == PyUnicode_4BYTE_KIND);
|
|| kind == PyUnicode_4BYTE_KIND);
|
||||||
assert(ascii->state.ascii == 0);
|
assert(ascii->state.ascii == 0);
|
||||||
assert(ascii->state.ready == 1);
|
assert(ascii->state.ready == 1);
|
||||||
|
assert (compact->utf8 != (void*)(compact + 1));
|
||||||
} else {
|
} else {
|
||||||
PyCompactUnicodeObject *compact = (PyCompactUnicodeObject *)op;
|
PyCompactUnicodeObject *compact = (PyCompactUnicodeObject *)op;
|
||||||
PyUnicodeObject *unicode = (PyUnicodeObject *)op;
|
PyUnicodeObject *unicode = (PyUnicodeObject *)op;
|
||||||
|
@ -318,6 +320,10 @@ _PyUnicode_CheckConsistency(void *op)
|
||||||
assert(ascii->state.compact == 0);
|
assert(ascii->state.compact == 0);
|
||||||
assert(ascii->state.ready == 1);
|
assert(ascii->state.ready == 1);
|
||||||
assert(unicode->data.any != NULL);
|
assert(unicode->data.any != NULL);
|
||||||
|
if (ascii->state.ascii)
|
||||||
|
assert (compact->utf8 == unicode->data.any);
|
||||||
|
else
|
||||||
|
assert (compact->utf8 != unicode->data.any);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue