[binutils-gdb] PR 32721, internal error in tc-i386.c:parse_register
Alan Modra
amodra@sourceware.org
Thu Feb 20 01:34:44 GMT 2025
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=46b9f07dfe79d8c6857dbfada485a3b9c0e3ffdb
commit 46b9f07dfe79d8c6857dbfada485a3b9c0e3ffdb
Author: Alan Modra <amodra@gmail.com>
Date: Thu Feb 20 11:49:25 2025 +1030
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.
Diff:
---
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);
}
More information about the Binutils-cvs
mailing list