diff options
Diffstat (limited to 'Python')
-rw-r--r-- | Python/traceback.c | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/Python/traceback.c b/Python/traceback.c index 9a11bf2..b66c96c 100644 --- a/Python/traceback.c +++ b/Python/traceback.c @@ -483,7 +483,8 @@ dump_ascii(int fd, PyObject *text) Py_ssize_t i, size; int truncated; int kind; - void *data; + void *data = NULL; + wchar_t *wstr = NULL; Py_UCS4 ch; size = ascii->length; @@ -494,11 +495,17 @@ dump_ascii(int fd, PyObject *text) else data = ((PyCompactUnicodeObject*)text) + 1; } - else { + else if (kind != PyUnicode_WCHAR_KIND) { data = ((PyUnicodeObject *)text)->data.any; if (data == NULL) return; } + else { + wstr = ((PyASCIIObject *)text)->wstr; + if (wstr == NULL) + return; + size = ((PyCompactUnicodeObject *)text)->wstr_length; + } if (MAX_STRING_LENGTH < size) { size = MAX_STRING_LENGTH; @@ -508,7 +515,10 @@ dump_ascii(int fd, PyObject *text) truncated = 0; for (i=0; i < size; i++) { - ch = PyUnicode_READ(kind, data, i); + if (kind != PyUnicode_WCHAR_KIND) + ch = PyUnicode_READ(kind, data, i); + else + ch = wstr[i]; if (ch < 128) { char c = (char)ch; write(fd, &c, 1); |