From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-sender-0.a4lg.com (mail-sender.a4lg.com [153.120.152.154]) by sourceware.org (Postfix) with ESMTPS id 68D7E385802F for ; Wed, 23 Feb 2022 01:47:49 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 68D7E385802F From: Tsukasa OI To: Tsukasa OI Cc: binutils@sourceware.org Subject: [PATCH 2/3] RISC-V: Stricter underscore handling for ISA Date: Wed, 23 Feb 2022 10:47:23 +0900 Message-Id: In-Reply-To: References: Mime-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-12.9 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_STATUS, SPF_HELO_NONE, SPF_PASS, TO_EQ_FM_DIRECT_MX, 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: binutils@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Binutils mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 23 Feb 2022 01:47:51 -0000 Double underscores and trailing underscore in an ISA string are invalid. bfd/ChangeLog: * elfxx-riscv.c (riscv_parse_std_ext): Make handling for underscores in ISA string more strict. (riscv_parse_prefixed_ext): Likewise. --- bfd/elfxx-riscv.c | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/bfd/elfxx-riscv.c b/bfd/elfxx-riscv.c index 329dcaed304..ee4b442ba89 100644 --- a/bfd/elfxx-riscv.c +++ b/bfd/elfxx-riscv.c @@ -1650,6 +1650,8 @@ riscv_parse_std_ext (riscv_parse_subset_t *rps, const char *arch, const char *p) { + unsigned char underscores = 0; + /* First letter must start with i, e or g. */ if (*p != 'e' && *p != 'i' && *p != 'g') { @@ -1669,8 +1671,15 @@ riscv_parse_std_ext (riscv_parse_subset_t *rps, if (*p == '_') { p++; + if (++underscores == 2) + { + rps->error_handler + (_("%s: double underscores"), arch); + return NULL; + } continue; } + underscores = 0; bool implicit = false; int major = RISCV_UNKNOWN_VERSION; @@ -1709,7 +1718,7 @@ riscv_parse_std_ext (riscv_parse_subset_t *rps, riscv_parse_add_subset (rps, subset, major, minor, implicit); } - return p; + return p - underscores; } /* Parsing function for prefixed extensions. @@ -1731,14 +1740,22 @@ riscv_parse_prefixed_ext (riscv_parse_subset_t *rps, int minor_version; const char *last_name; enum riscv_prefix_ext_class class; + unsigned char underscores = 0; while (*p) { if (*p == '_') { p++; + if (++underscores == 2) + { + rps->error_handler + (_("%s: double underscores"), arch); + return NULL; + } continue; } + underscores = 0; class = riscv_get_prefix_class (p); if (class == RV_ISA_CLASS_UNKNOWN) @@ -1843,6 +1860,12 @@ riscv_parse_prefixed_ext (riscv_parse_subset_t *rps, } } + if (underscores) + { + rps->error_handler + (_("%s: trailing underscore"), arch); + return NULL; + } return p; } -- 2.32.0