]> granicus.if.org Git - python/commitdiff
faulthandler: enhance dump_ascii() to escape also non-printable ASCII
authorVictor Stinner <victor.stinner@gmail.com>
Fri, 3 Oct 2014 12:18:09 +0000 (14:18 +0200)
committerVictor Stinner <victor.stinner@gmail.com>
Fri, 3 Oct 2014 12:18:09 +0000 (14:18 +0200)
characters (U+0000..U+001f and U+007f).

Python/traceback.c

index 565094b1e8f91e4007ad281c9be2aff4fb014b01..5d60dade4cb0803544bea8a100807bdd1513a291 100644 (file)
@@ -541,15 +541,16 @@ dump_ascii(int fd, PyObject *text)
             ch = PyUnicode_READ(kind, data, i);
         else
             ch = wstr[i];
-        if (ch < 128) {
+        if (' ' <= ch && ch <= 126) {
+            /* printable ASCII character */
             char c = (char)ch;
             write(fd, &c, 1);
         }
-        else if (ch < 0xff) {
+        else if (ch <= 0xff) {
             PUTS(fd, "\\x");
             dump_hexadecimal(fd, ch, 2);
         }
-        else if (ch < 0xffff) {
+        else if (ch <= 0xffff) {
             PUTS(fd, "\\u");
             dump_hexadecimal(fd, ch, 4);
         }
@@ -644,7 +645,7 @@ write_thread_id(int fd, PyThreadState *tstate, int is_current)
         PUTS(fd, "Current thread 0x");
     else
         PUTS(fd, "Thread 0x");
-    dump_hexadecimal(fd, (unsigned long)tstate->thread_id, sizeof(long)*2);
+    dump_hexadecimal(fd, (unsigned long)tstate->thread_id, sizeof(unsigned long)*2);
     PUTS(fd, " (most recent call first):\n");
 }