[PATCH 2/3] gas: don't recognize '8' and '9' as octal escape chars in strings

Jan Beulich jbeulich@suse.com
Fri Jun 19 08:17:57 GMT 2026


It's not clear why these were covered; it has been like this from the very
beginning of (available) source history. Yet more oddly, an old ia64
testcase actually uses such malformed escape sequences (which are being
adjusted).

--- a/gas/read.c
+++ b/gas/read.c
@@ -6206,14 +6206,12 @@ next_char_of_string (void)
 	case '5':
 	case '6':
 	case '7':
-	case '8':
-	case '9':
 	  {
 	    unsigned number;
 	    int i;
 
 	    for (i = 0, number = 0;
-		 ISDIGIT (c) && i < 3;
+		 i < 3 && c >= '0' && c <= '7';
 		 c = *input_line_pointer++, i++)
 	      {
 		number = number * 8 + c - '0';
--- a/gas/testsuite/gas/ia64/alias.s
+++ b/gas/testsuite/gas/ia64/alias.s
@@ -1,11 +1,11 @@
 	.section .foo,"aw","progbits"
 	.secalias .foo,"1234"
 	.secalias .foo,"1234"
-	.alias foo, "\"\80\84\""
-	.alias foo, "\"\80\84\""
+	.alias foo, "\"\100\104\""
+	.alias foo, "\"\100\104\""
 foo:
-	stringz "\"\80\84\""
+	stringz "\"\x40\x44\""
 	.secalias .foo,"1234"
 	.secalias .foo,"1234"
-	.alias foo, "\"\80\84\""
-	.alias foo, "\"\80\84\""
+	.alias foo, "\"\x40\x44\""
+	.alias foo, "\"\x40\x44\""



More information about the Binutils mailing list