From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from alt-proxy28.mail.unifiedlayer.com (alt-proxy28.mail.unifiedlayer.com [74.220.216.123]) by sourceware.org (Postfix) with ESMTPS id A76DD3858008 for ; Wed, 16 Feb 2022 13:55:28 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org A76DD3858008 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=tromey.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=tromey.com Received: from cmgw13.mail.unifiedlayer.com (unknown [10.0.90.128]) by progateway1.mail.pro1.eigbox.com (Postfix) with ESMTP id 08E501003ED43 for ; Wed, 16 Feb 2022 13:55:28 +0000 (UTC) Received: from box5379.bluehost.com ([162.241.216.53]) by cmsmtp with ESMTP id KKmFnBd3uEaNCKKmFn78Fm; Wed, 16 Feb 2022 13:55:28 +0000 X-Authority-Reason: nr=8 X-Authority-Analysis: v=2.4 cv=fNX8YbWe c=1 sm=1 tr=0 ts=620d0250 a=ApxJNpeYhEAb1aAlGBBbmA==:117 a=ApxJNpeYhEAb1aAlGBBbmA==:17 a=dLZJa+xiwSxG16/P+YVxDGlgEgI=:19 a=oGFeUVbbRNcA:10:nop_rcvd_month_year a=Qbun_eYptAEA:10:endurance_base64_authed_username_1 a=L9ZSemrhmop9vO4FpFQA:9 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=tromey.com; s=default; h=Content-Transfer-Encoding:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Sender:Reply-To:Content-Type:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=vnqsG6LkEhK9tEj6wG2e+C7WZqEYDytOkF2IO418zlY=; b=B4LLX6Mvwq1iwfoB+Z7eNJQogB 773YbIY35O9VR1bh7krulqQcr+1yheWn85Tnk7OokfMMzr0+z0Lq3j0qN7IWU9DB5Wr7MYrT4ffpj RhUhLDEUbNgmZKxdoxN6l52xx; Received: from 97-122-95-113.hlrn.qwest.net ([97.122.95.113]:41018 helo=prentzel.Home) by box5379.bluehost.com with esmtpsa (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1nKKmF-000GMY-9i; Wed, 16 Feb 2022 06:55:27 -0700 From: Tom Tromey To: gdb-patches@sourceware.org Cc: Tom Tromey Subject: [PATCH 06/18] Fix a latent bug in print_wchar Date: Wed, 16 Feb 2022 06:55:06 -0700 Message-Id: <20220216135518.3162480-7-tom@tromey.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20220216135518.3162480-1-tom@tromey.com> References: <20220216135518.3162480-1-tom@tromey.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - box5379.bluehost.com X-AntiAbuse: Original Domain - sourceware.org X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - tromey.com X-BWhitelist: no X-Source-IP: 97.122.95.113 X-Source-L: No X-Exim-ID: 1nKKmF-000GMY-9i X-Source: X-Source-Args: X-Source-Dir: X-Source-Sender: 97-122-95-113.hlrn.qwest.net (prentzel.Home) [97.122.95.113]:41018 X-Source-Auth: tom+tromey.com X-Email-Count: 7 X-Source-Cap: ZWx5bnJvYmk7ZWx5bnJvYmk7Ym94NTM3OS5ibHVlaG9zdC5jb20= X-Local-Domain: yes X-Spam-Status: No, score=-3031.7 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, GIT_PATCH_0, JMQ_SPF_NEUTRAL, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 16 Feb 2022 13:55:31 -0000 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