]> git.kaiwu.me - njs.git/commitdiff
Fixed parsing of hex, oct and binary literals with no digits.
authorVadim Zhestikov <v.zhestikov@f5.com>
Mon, 29 Jan 2024 16:57:49 +0000 (08:57 -0800)
committerVadim Zhestikov <v.zhestikov@f5.com>
Mon, 29 Jan 2024 16:57:49 +0000 (08:57 -0800)
src/njs_lexer.c
src/test/njs_unit_test.c

index 310e9674f61aee622df3303ae65f17f1237d1b54..4a51c6680a472291a9fdebe44df07d7e975473d6 100644 (file)
@@ -915,7 +915,7 @@ njs_lexer_number(njs_lexer_t *lexer, njs_lexer_token_t *token)
         if (*p == 'x' || *p == 'X') {
             p++;
 
-            if (p == lexer->end) {
+            if (p == lexer->end || njs_char_to_hex(*p) < 0) {
                 goto illegal_token;
             }
 
@@ -929,7 +929,7 @@ njs_lexer_number(njs_lexer_t *lexer, njs_lexer_token_t *token)
         if (*p == 'o' || *p == 'O') {
             p++;
 
-            if (p == lexer->end) {
+            if (p == lexer->end || (u_char)(*p - '0') > 7) {
                 goto illegal_token;
             }
 
@@ -947,7 +947,7 @@ njs_lexer_number(njs_lexer_t *lexer, njs_lexer_token_t *token)
         if (*p == 'b' || *p == 'B') {
             p++;
 
-            if (p == lexer->end) {
+            if (p == lexer->end || (u_char)(*p - '0') > 1) {
                 goto illegal_token;
             }
 
index 605418158a44d132420b6a69945e5e89dddf5f0e..14bb6718709dc4748bf3660de9d59a41853688a7 100644 (file)
@@ -353,7 +353,10 @@ static njs_unit_test_t  njs_test[] =
       njs_str("SyntaxError: Unexpected token \"0O778\" in 1") },
 
     { njs_str("0O_7"),
-      njs_str("SyntaxError: Unexpected token \"_7\" in 1") },
+      njs_str("SyntaxError: Unexpected token \"0O\" in 1") },
+
+    { njs_str("0O + 1"),
+      njs_str("SyntaxError: Unexpected token \"0O\" in 1") },
 
     { njs_str("0o7_"),
       njs_str("SyntaxError: Unexpected token \"_\" in 1") },
@@ -408,7 +411,10 @@ static njs_unit_test_t  njs_test[] =
       njs_str("SyntaxError: Unexpected token \"0B12\" in 1") },
 
     { njs_str("0b_11"),
-      njs_str("SyntaxError: Unexpected token \"_11\" in 1") },
+      njs_str("SyntaxError: Unexpected token \"0b\" in 1") },
+
+    { njs_str("0b + 1"),
+      njs_str("SyntaxError: Unexpected token \"0b\" in 1") },
 
     { njs_str("0B1__1"),
       njs_str("SyntaxError: Unexpected token \"__1\" in 1") },
@@ -446,7 +452,10 @@ static njs_unit_test_t  njs_test[] =
       njs_str("SyntaxError: Unexpected token \"g\" in 1") },
 
     { njs_str("0X_ff"),
-      njs_str("SyntaxError: Unexpected token \"_ff\" in 1") },
+      njs_str("SyntaxError: Unexpected token \"0X\" in 1") },
+
+    { njs_str("0X + 1"),
+      njs_str("SyntaxError: Unexpected token \"0X\" in 1") },
 
     { njs_str("0xff_"),
       njs_str("SyntaxError: Unexpected token \"_\" in 1") },