[Python-checkins] cpython: traceback: fix dump_ascii() for string with kind=PyUnicode_WCHAR_KIND

victor.stinner python-checkins at python.org
Wed Oct 5 22:44:12 CEST 2011


http://hg.python.org/cpython/rev/2a8ccff8f337
changeset:   72710:2a8ccff8f337
user:        Victor Stinner <victor.stinner at haypocalc.com>
date:        Wed Oct 05 22:44:12 2011 +0200
summary:
  traceback: fix dump_ascii() for string with kind=PyUnicode_WCHAR_KIND

files:
  Python/traceback.c |  16 +++++++++++++---
  1 files changed, 13 insertions(+), 3 deletions(-)


diff --git a/Python/traceback.c b/Python/traceback.c
--- a/Python/traceback.c
+++ b/Python/traceback.c
@@ -483,7 +483,8 @@
     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 @@
         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 @@
         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);

-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list