[PATCH 06/18] Fix a latent bug in print_wchar
Tom Tromey
tom@tromey.com
Wed Feb 16 13:55:06 GMT 2022
print_wchar keeps track of when escape sequences are emitted, to force
an escape sequence if needed by a subsequent character. For example
for the string concatenation "\0" "1", gdb will print "\000\061" --
because printing "\0001" might be confusing.
However, this code has a logic error. It's intended to reject '8' and
'9', as they are not octal digits, but it fails to do so. This patch
fixes the bug, and slightly rewrites the expression to be a bit more
clear.
I suspect that, actually, this code can be removed entirely, because
octal sequences are limited to 3 digits. However, I'm not certain, so
I've left it in place.
---
gdb/testsuite/gdb.base/charset.exp | 4 ++++
gdb/valprint.c | 7 ++++---
2 files changed, 8 insertions(+), 3 deletions(-)
diff --git a/gdb/testsuite/gdb.base/charset.exp b/gdb/testsuite/gdb.base/charset.exp
index 5df2ec1a8de..97d49b9c461 100644
--- a/gdb/testsuite/gdb.base/charset.exp
+++ b/gdb/testsuite/gdb.base/charset.exp
@@ -503,6 +503,10 @@ gdb_test "print '\\9'" " = \[0-9\]+ '9'"
# An octal escape can only be 3 digits.
gdb_test "print \"\\1011\"" " = \"A1\""
+# Neither 8 nor 9 need escaping in this situation.
+gdb_test "print \"\\0\" \"8\"" " = \"\\\\0008\""
+gdb_test "print \"\\0\" \"9\"" " = \"\\\\0009\""
+
# Tests for wide- or unicode- strings. L is the prefix letter to use,
# either "L" (for wide strings), "u" (for UTF-16), or "U" (for UTF-32).
# NAME is used in the test names and should be related to the prefix
diff --git a/gdb/valprint.c b/gdb/valprint.c
index 17ad46c87b5..7e67cb953f4 100644
--- a/gdb/valprint.c
+++ b/gdb/valprint.c
@@ -2222,9 +2222,10 @@ print_wchar (gdb_wint_t w, const gdb_byte *orig,
break;
default:
{
- if (gdb_iswprint (w) && (!need_escape || (!gdb_iswdigit (w)
- && w != LCST ('8')
- && w != LCST ('9'))))
+ if (gdb_iswprint (w)
+ && !(need_escape && (gdb_iswdigit (w)
+ && w != LCST ('8')
+ && w != LCST ('9'))))
{
gdb_wchar_t wchar = w;
--
2.31.1
More information about the Gdb-patches
mailing list