faulthandler: enhance dump_ascii() to escape also non-printable ASCII

characters (U+0000..U+001f and U+007f).
This commit is contained in:
Victor Stinner 2014-10-03 14:18:09 +02:00
parent 392f4139b3
commit b86f08f743
1 changed files with 5 additions and 4 deletions

View File

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