libiberty d_compact_number signed integer overflow
Alan Modra <[email protected]>
| Newsgroups | gmane.comp.gcc.patches,gmane.comp.gnu.binutils |
|---|---|
| Message-ID | <[email protected]> |
https://lists.gnu.org/archive/html/bug-binutils/2026-06/msg00189.html
Fix this by doing the addition in unsigned arithmetic.
Applying to binutils and gcc as obvious.
diff --git a/libiberty/cp-demangle.c b/libiberty/cp-demangle.c
index 5f08ef8946a..ab122fc388d 100644
--- a/libiberty/cp-demangle.c
+++ b/libiberty/cp-demangle.c
@@ -3266,7 +3266,7 @@ d_compact_number (struct d_info *di)
else if (d_peek_char (di) == 'n')
return -1;
else
- num = d_number (di) + 1;
+ num = d_number (di) + 1u;
if (num < 0 || ! d_check_char (di, '_'))
return -1;
--
Alan Modra