From 46b9f07dfe79d8c6857dbfada485a3b9c0e3ffdb Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Thu, 20 Feb 2025 11:49:25 +1030 Subject: [PATCH] PR 32721, internal error in tc-i386.c:parse_register pr30117 showed one of the assertions added by 4d1bb7955a8b was too strict. oss-fuzz also found the second assertion to be too strict, with this testcase distilled from 7k of garbage source: A=%eax%%! Y=A Z=A or $6,Z PR 32721 * config/tc-i386.c (parse_register): Move "know" into condition. Simplify. --- gas/config/tc-i386.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/gas/config/tc-i386.c b/gas/config/tc-i386.c index 9cfc4df1e10..53743fb4d7f 100644 --- a/gas/config/tc-i386.c +++ b/gas/config/tc-i386.c @@ -16838,10 +16838,9 @@ parse_register (const char *reg_string, char **end_op) { const expressionS *e = symbol_get_value_expression (symbolP); - if (e->X_op == O_register) + if (e->X_op == O_register + && (valueT) e->X_add_number < i386_regtab_size) { - know (e->X_add_number >= 0 - && (valueT) e->X_add_number < i386_regtab_size); r = i386_regtab + e->X_add_number; *end_op = (char *) reg_string + (input_line_pointer - buf); } -- 2.39.5