]> git.kaiwu.me - njs.git/commitdiff
Parser: fixed string escape lookahead bounds
authorDmitry Volyntsev <xeioex@nginx.com>
Sat, 23 May 2026 01:32:16 +0000 (18:32 -0700)
committerDmitry Volyntsev <xeioexception@gmail.com>
Tue, 26 May 2026 21:45:24 +0000 (14:45 -0700)
src/njs_parser.c
src/test/njs_unit_test.c

index 93811746679f9739b7c947c4b362a7bc58a5d843..c54cd55df329e2cf9337330a0a813b6a9a759b50 100644 (file)
@@ -9255,7 +9255,9 @@ next_char:
             cp_pair = 0;
 
         } else if (njs_surrogate_any(cp)) {
-            if (cp <= 0xdbff && src[0] == '\\' && src[1] == 'u') {
+            if (cp <= 0xdbff && (end - src) >= 2
+                && src[0] == '\\' && src[1] == 'u')
+            {
                 cp_pair = cp;
                 continue;
             }
@@ -9412,7 +9414,9 @@ njs_parser_escape_string_calc_length(njs_parser_t *parser,
             cp_pair = 0;
 
         } else if (njs_surrogate_any(cp)) {
-            if (cp <= 0xdbff && src[0] == '\\' && src[1] == 'u') {
+            if (cp <= 0xdbff && (end - src) >= 2
+                && src[0] == '\\' && src[1] == 'u')
+            {
                 cp_pair = cp;
                 continue;
             }
index edbddd79b817abe1a6bf5c4cacb32f4a2d2cc204..02ce2c5a9717374e1d7df19f2d7517d26c32bd51 100644 (file)
@@ -8160,6 +8160,12 @@ static njs_unit_test_t  njs_test[] =
     { njs_str("`\\${a}bc"),
       njs_str("SyntaxError: Unterminated template literal") },
 
+    { njs_str("`\\ud83d`"),
+      njs_str("�") },
+
+    { njs_str("`\\ud83d${1}`"),
+      njs_str("�1") },
+
     { njs_str("var v = undefined; var u8 = 'α';"
               "[`undefined${u8}`.length, `undefineQ${u8}`.length]"),
       njs_str("10,10") },