From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id OO2QG6JjFGOm/jIAWB0awg (envelope-from ) for ; Sun, 04 Sep 2022 04:36:50 -0400 Received: by simark.ca (Postfix, from userid 112) id 56F6D1E4A7; Sun, 4 Sep 2022 04:36:50 -0400 (EDT) Authentication-Results: simark.ca; dkim=pass (1024-bit key; secure) header.d=sourceware.org header.i=@sourceware.org header.a=rsa-sha256 header.s=default header.b=Hi8rh1O+; dkim-atps=neutral X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on simark.ca X-Spam-Level: X-Spam-Status: No, score=-3.0 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 Received: from sourceware.org (server2.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by simark.ca (Postfix) with ESMTPS id DDA8D1E13B for ; Sun, 4 Sep 2022 04:36:49 -0400 (EDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 8BC993857419 for ; Sun, 4 Sep 2022 08:36:48 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 8BC993857419 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1662280608; bh=bgaOUkRsCC2APwlNkMtrsnjwkIsmVogwGSKO/kpT70A=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:Cc:From; b=Hi8rh1O+x7yakcIDhY/qk+pvjZaIBVJq2PaGg9FCoF/x/y8EVIBPXSSTSkQ647aLC C7JeriMrgmxO3U48Eh8HdgCXZhUlQiCY9Gr41yGpRVVvc2+bt8cyPJLLcIB2+QyL6y JGub13lbJ5PeTrKNSS6OE8lwQXVQHbVZGKa8Iyhk= Received: from JPN01-OS0-obe.outbound.protection.outlook.com (mail-os0jpn01olkn2091.outbound.protection.outlook.com [40.92.98.91]) by sourceware.org (Postfix) with ESMTPS id 7490E3857831 for ; Sun, 4 Sep 2022 08:36:23 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 7490E3857831 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=cu68iNcx0tqh1HuKB9lYnU/TVJyew3viOgQPIuZvd7I5GE4pd/6EgRIl6RY+9eCmuDXLFEH6a7KpwEgMNi9eLyJOKQxQSA7WmFHNXUPJA/tVovjLfdoNdJryH56griEi1NvqVPmT4DjXg/TA6Be9mGiggdtrmEzaekk+pcv/OyM9lX0CC6lDo9szc7drbLOASRUk+/uGw0DxN/EzbxQY1T+LXRTo8InO4e6ijUaOaoqrqbRqgaV/++YhKJLgQvXc1hxhY+lz1bdQdDCEVlsgy/BJ0swUWrx1pDtCQ4PvZv91OCYcsfts0rE+VnsKARaj1OwAcgq2VrlTXJYthMWu2w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=bgaOUkRsCC2APwlNkMtrsnjwkIsmVogwGSKO/kpT70A=; b=F2rHda9Yo5vNPZoxf4MVKaoEfAAIG5PGm7L4BkE99kg79t24mvKDL89Cl5VKZJmx2QHfBk6ktl0DLLCNYo2DOjL94jlRb8wZ/Rw2vyg1Oe5jHFDupDAna+qVDlSvZpiHyWwDnZuk/CsQW9Gbut6wbyzLC8J8RMsJpW3ruBvj7i4sneO/YmD9bah7RwnMTpH8siLRpu04VtvdIlS4ifZmfhKEGJivSXDt8TdL98zI2TxfiJcJMtVsJWudA455QxuDPwvwfUvyIVBgZIB72GCsLx3O0u8X91FR7auAgTtFWjQklPtwg5AkZGAAXjI7W9Lun15gNThzwPTkff3/EmJx2A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none Received: from OS3P286MB2152.JPNP286.PROD.OUTLOOK.COM (2603:1096:604:197::9) by OS3P286MB1832.JPNP286.PROD.OUTLOOK.COM (2603:1096:604:172::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5588.10; Sun, 4 Sep 2022 08:36:20 +0000 Received: from OS3P286MB2152.JPNP286.PROD.OUTLOOK.COM ([fe80::871:c111:c492:604a]) by OS3P286MB2152.JPNP286.PROD.OUTLOOK.COM ([fe80::871:c111:c492:604a%4]) with mapi id 15.20.5588.017; Sun, 4 Sep 2022 08:36:20 +0000 To: gdb-patches@sourceware.org Subject: [PATCH] gdb: add a numeric check after the exponent (PR cli/24124) Date: Sun, 4 Sep 2022 16:36:01 +0800 Message-ID: X-Mailer: git-send-email 2.37.2 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-TMN: [KpbkUKPVKvOxcbVK2ZweCabBkDhtFpe1] X-ClientProxiedBy: SG2PR06CA0223.apcprd06.prod.outlook.com (2603:1096:4:68::31) To OS3P286MB2152.JPNP286.PROD.OUTLOOK.COM (2603:1096:604:197::9) X-Microsoft-Original-Message-ID: <20220904083601.31114-1-enze.li@hotmail.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 722089f6-771c-45ee-f8a2-08da8e508a45 X-MS-TrafficTypeDiagnostic: OS3P286MB1832:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: yuh7+qPkLuvaVBP87hEYHu2JcDVzfYjGaSauatZOfKuKYgLJspz5dUYVS148eg+NKIhcJ/IEQWTVq3FbmUOPx2ZIBsmt7SgDGN0ym1kUzGe4PQIwLOfdAi6M9z6mCh4C+8g3B7L9LzO0tW2mwy/1rE7qrKWH8hy5z1Py/ahyQV/8oplQgcQThKO8QXC2xLHJnfZzU0uNzowb7Qyh5ZVhmD17KYuyT0PONY/o8Qmg4/o4sL1O9RQo/N/9/SnqDpuroFc5HaUaegNGf0iqf3JrBIQi5N3ILIFk7RBprR4gA3dfIdPWJ830dsN6zxD6tDc0qIPZRvf/O66qh2UyjNquAMD3Hn9SnknF9cec0TzKkv67ZfMml8hqCv9ZVb1jpkvK7pqEM+SJ+GVZTEMiBUJK0m7iFsOk0MHYJZKdJajZIug70G4SIaU5Rx8gfPpZq4cwtTpuP8Z049wCsU1y5/AM1SNovEjhMSEm9KrcwEHptCThk2hG2DVZU5zx7Ig4frOfNKeP7X7iwgLf8MrxOXwVwXqPH8g58+qHzYfs9FDmMOpen4VKeoeLpuP4gFm/5vRjLueEZYk90iXO9yfNMPEYU/yqhqPYVRfuN3Lfw299I/OW+W7c1Xcdw5A1Om1zSygR X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?oKpZwKFfFCV0ndErBMFS58MwI+sHtfD2x6E1KlbNlbL2QUXSMXTZa/t01nj7?= =?us-ascii?Q?BrQOTqgtHxPmNMz+gCADInlvg7jjwq4cHdN6vdHYVcaq47UyjfF7QJmwF343?= =?us-ascii?Q?RfTkb/YDkNFSlMEgzjr6E6cG9N1Y9gl1GSf+eiaoaHspOrDld+VlTWl7QE3+?= =?us-ascii?Q?tEyCLI8vLovNbmSLDsGdBS/p+6mj3+LWR8+V9pfBloW9vh/BAFW/P3f8u+or?= =?us-ascii?Q?NPNArKAgtEKnXl7LzmEMe5/SMBoi66PC7h+Y6RYd2D1pO6ZPfwNY8+YGtEmF?= =?us-ascii?Q?j0FUOnGGj5a2mXM5GqsVVqlj+ynbHnG9SUu9lNlgrfgrT2040WqEc81lZd1N?= =?us-ascii?Q?i+FIzW3vcXjJmtufzO7LHhgB5qm4XHIV9uyN4lmrOJucfX0pB4jWJPLNiIHD?= =?us-ascii?Q?VX2f13/rVDmE2DzqGTncd8UhiPxO4mXWRaEhoXdUunR8sdeIPb9QTLkW4/tA?= =?us-ascii?Q?/sGdRgdr0ZbCaoqeNHj60AYi0sqHTOR0a6zrh/4nxvMZkjfP6p4Wmv3ocRlP?= =?us-ascii?Q?sO2BNq5UKJEvoxE7TvRWmpjjzKySsTsoDN1IkTkbMfDvynDfGRr3c1+E3s4y?= =?us-ascii?Q?miuVct8AVfGx4X5uLeLP3pS1/MfsTyZgSscH96r7NAauNcN+USpa2T1vw5hE?= =?us-ascii?Q?VQyXoYpmNDbZgmP0GJ3RqqV+qXTs7OpjmI9M67jMSTFnyF0EmN4Go4JMeMXX?= =?us-ascii?Q?aWIl9Bphl/l1+n4e7I3usmE9ctAAo/BACbD/SrGFEpw40nsdaSmPSsHTtDxa?= =?us-ascii?Q?mhyZhLOdchYfT+g1oJ2DhHuXnUNaoqmF0VE6vOomM+TW/ITI9UNu7IwPJaYX?= =?us-ascii?Q?IURpvmL0jJuZBQSmbifJ38QmmKUrrZ7TFa14XOAvw/nCdO0q8FuG8T00uoV/?= =?us-ascii?Q?qxYKVn6DMItz5fsaDCciUmKhD8YakgUVDkkIE/T+Y22fi0pIw9a+zsWdB5Dl?= =?us-ascii?Q?y3x6SfHlS+0FwScwFK38tc6PrjZ4vb4bsRMTp5wYAl7uQ37aEdS7r/s1bW+v?= =?us-ascii?Q?gpOk6cU+r1CICAqPBrKImhM13cXORXb/ibQGAwA0xK04hR+uL2A96Zc15hpr?= =?us-ascii?Q?nCYmnu4+ogOolMm7XXXvcqnlP2pRFghr/BR+HZusq6Oga0empSp7ANE0BbEZ?= =?us-ascii?Q?/PGh1z1VcY0mOFHGd7Z39mDaAt11631ddvUW08Qi3sbB05r/9GCzQPHZWEjH?= =?us-ascii?Q?DsDgNnyypfrFfJftMy1EeUa32wSpm8J+S6r5UZw5aY+7AwrOCtYm9V8KqUj4?= =?us-ascii?Q?MJz8mQHF9pnD7MFVh5H4VbQE76S15gX0V6MGRzTBSA=3D=3D?= X-OriginatorOrg: sct-15-20-4755-11-msonline-outlook-05f45.templateTenant X-MS-Exchange-CrossTenant-Network-Message-Id: 722089f6-771c-45ee-f8a2-08da8e508a45 X-MS-Exchange-CrossTenant-AuthSource: OS3P286MB2152.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Sep 2022 08:36:20.4873 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: OS3P286MB1832 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: , From: Enze Li via Gdb-patches Reply-To: Enze Li Cc: enze.li@gmx.com Errors-To: gdb-patches-bounces+public-inbox=simark.ca@sourceware.org Sender: "Gdb-patches" PR cli/24124 points out that `b *804874d` or `b *804874f` gives output `Invalid number "804874d".` or `Invalid number "804874f".` And the output of `b *804874e` is `Breakpoint 1 at 0xc480a`. That is to say, when "e" or "E" appears after a decimal value, it will be incorrectly parsed as a floating point number. Importantly, this parsing is not consistent with the C language. The initial idea was to perform a "0x" or "0X" check of the address. But Tom pointed out that the text after the "*" is an arbitrary expression, not just an integer. Therefore, I realized that this idea was going in the wrong direction. After digging a bit deeper, I found that the root cause of this problem is that the lex_one_token function doesn't check for the case where the exponent has no digits. If we check this, GDB will not continue parsing the invalid numbers. Before this patch applied, things like (gdb) b *804874d Invalid number "804874d". (gdb) b *804874e Breakpoint 1 at 0xc480a (gdb) print 80d Invalid number "80d". (gdb) ptype 80d Invalid number "80d". (gdb) print 80e $1 = 80 (gdb) ptype 80e type = double The new behavior is (gdb) b *804874d Invalid number "804874d". (gdb) b *804874e Invalid number "804874e". (gdb) print 80d Invalid number "80d". (gdb) ptype 80d Invalid number "80d". (gdb) print 80e Invalid number "80e". (gdb) ptype 80e Invalid number "80e". Tested on x86_64-linux. Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=24124 --- gdb/c-exp.y | 3 ++- gdb/testsuite/gdb.base/commands.exp | 7 +++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/gdb/c-exp.y b/gdb/c-exp.y index 61a61fcba09c..b13de967b1b6 100644 --- a/gdb/c-exp.y +++ b/gdb/c-exp.y @@ -2769,7 +2769,8 @@ lex_one_token (struct parser_state *par_state, bool *is_quoted_name) /* This test includes !hex because 'e' is a valid hex digit and thus does not indicate a floating point number when the radix is hex. */ - if (!hex && !got_e && !got_p && (*p == 'e' || *p == 'E')) + if (!hex && !got_e && !got_p && (*p == 'e' || *p == 'E') + && p[1] >= '0' && p[1] <= '9') got_dot = got_e = 1; else if (!got_e && !got_p && (*p == 'p' || *p == 'P')) got_dot = got_p = 1; diff --git a/gdb/testsuite/gdb.base/commands.exp b/gdb/testsuite/gdb.base/commands.exp index 3eb4463cd1a5..ca30b757e38a 100644 --- a/gdb/testsuite/gdb.base/commands.exp +++ b/gdb/testsuite/gdb.base/commands.exp @@ -278,6 +278,13 @@ proc_with_prefix breakpoint_command_test {} { gdb_test "continue" \ "Breakpoint \[0-9\]*, factorial.*Now the value is 5" gdb_test "print value" " = 5" + + gdb_test "break *804874d" "Invalid number.*" "804874d is an invalid number" + gdb_test "break *804874e" "Invalid number.*" "804874e is an invalid number" + gdb_test "print 80d" "Invalid number.*" "(print) 80d is an invalid number" + gdb_test "ptype 80d" "Invalid number.*" "(ptype) 80d is an invalid number" + gdb_test "print 80e" "Invalid number.*" "(print) 80e is an invalid number" + gdb_test "ptype 80e" "Invalid number.*" "(ptype) 80e is an invalid number" } # Test clearing the commands of several breakpoints with one single "end". -- 2.37.2