public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
From: Tom Tromey <tom@tromey.com>
To: gdb-patches@sourceware.org
Cc: Tom Tromey <tom@tromey.com>
Subject: [PATCH 06/18] Fix a latent bug in print_wchar
Date: Wed, 16 Feb 2022 06:55:06 -0700	[thread overview]
Message-ID: <20220216135518.3162480-7-tom@tromey.com> (raw)
In-Reply-To: <20220216135518.3162480-1-tom@tromey.com>

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


  parent reply	other threads:[~2022-02-16 13:55 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-02-16 13:55 [PATCH 00/18] Refactor character printing Tom Tromey
2022-02-16 13:55 ` [PATCH 01/18] Fix latent quote char bug in generic_printstr Tom Tromey
2022-02-16 15:38   ` Andrew Burgess
2022-02-16 13:55 ` [PATCH 02/18] Boolify need_escape in generic_emit_char Tom Tromey
2022-02-16 15:39   ` Andrew Burgess
2022-02-16 13:55 ` [PATCH 03/18] Remove c_emit_char Tom Tromey
2022-02-16 15:40   ` Andrew Burgess
2022-02-16 13:55 ` [PATCH 04/18] Remove c_printstr Tom Tromey
2022-02-16 15:46   ` Andrew Burgess
2022-02-16 13:55 ` [PATCH 05/18] Don't use wchar_printable in print_wchar Tom Tromey
2022-02-16 15:52   ` Andrew Burgess
2022-02-16 13:55 ` Tom Tromey [this message]
2022-02-16 16:02   ` [PATCH 06/18] Fix a latent bug " Andrew Burgess
2022-02-17 22:02     ` Tom Tromey
2022-02-16 13:55 ` [PATCH 07/18] Remove language_defn::emitchar Tom Tromey
2022-02-16 16:12   ` Andrew Burgess
2022-02-17 22:02     ` Tom Tromey
2022-02-16 13:55 ` [PATCH 08/18] Add gdb_iswcntrl Tom Tromey
2022-02-16 16:13   ` Andrew Burgess
2022-02-16 13:55 ` [PATCH 09/18] Include \0 in printable wide characters Tom Tromey
2022-02-16 17:19   ` Andrew Burgess
2022-02-16 13:55 ` [PATCH 10/18] Use a ui_file in print_wchar Tom Tromey
2022-02-16 17:25   ` Andrew Burgess
2022-02-16 13:55 ` [PATCH 11/18] Add an emitter callback to generic_printstr and generic_emit_char Tom Tromey
2022-02-16 17:47   ` Andrew Burgess
2022-02-16 20:40     ` Tom Tromey
2022-02-16 21:00       ` Tom Tromey
2022-02-16 13:55 ` [PATCH 12/18] Add a default encoding to generic_emit_char and generic_printstr Tom Tromey
2022-02-16 13:55 ` [PATCH 13/18] Change generic_emit_char to print the quotes Tom Tromey
2022-02-16 13:55 ` [PATCH 14/18] Use generic_emit_char in Rust Tom Tromey
2022-02-16 13:55 ` [PATCH 15/18] Use generic_emit_char in Ada Tom Tromey
2022-02-16 13:55 ` [PATCH 16/18] Use generic_emit_char in Modula-2 Tom Tromey
2022-02-16 13:55 ` [PATCH 17/18] Use generic_emit_char in Pascal Tom Tromey
2022-02-16 13:55 ` [PATCH 18/18] Simplify Fortran string printing Tom Tromey

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220216135518.3162480-7-tom@tromey.com \
    --to=tom@tromey.com \
    --cc=gdb-patches@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).