]> git.sur5r.net Git - cc65/commitdiff
scanner: Correct handling of \0101
authorAlan Cox <alan@linux.intel.com>
Sat, 19 Nov 2016 13:02:19 +0000 (13:02 +0000)
committerAlan Cox <alan@linux.intel.com>
Sat, 19 Nov 2016 13:02:19 +0000 (13:02 +0000)
The C language has this oddity that octal constants are 3 bytes so the sequence
"\0101" is two bytes and well defined by the langage. cc65 currently misparses
this as a 1 byte octal code. Add a count to fix this.

Signed-off-by: Alan Cox <etchedpixels@gmail.com>
src/cc65/scanner.c

index 16d43e2eae30df2e365f1ebfd2ed8e9151630cba..d867c985779b36e85d8cded8b4287394e75f8448 100644 (file)
@@ -267,6 +267,7 @@ static int ParseChar (void)
 {
     int C;
     int HadError;
+    int Count;
 
     /* Check for escape chars */
     if (CurC == '\\') {
@@ -337,8 +338,9 @@ static int ParseChar (void)
             case '7':
                 /* Octal constant */
                 HadError = 0;
+                Count = 1;
                 C = HexVal (CurC);
-                while (IsODigit (NextC)) {
+                while (IsODigit (NextC) && Count++ < 3) {
                     if ((C << 3) >= 256) {
                         if (!HadError) {
                             Error ("Octal character constant out of range");