]> git.kaiwu.me - njs.git/commitdiff
Fixed lexer referencing in runtime.
authorDmitry Volyntsev <xeioex@nginx.com>
Thu, 28 Feb 2019 16:30:32 +0000 (19:30 +0300)
committerDmitry Volyntsev <xeioex@nginx.com>
Thu, 28 Feb 2019 16:30:32 +0000 (19:30 +0300)
njs/njs.c
njs/njs_parser.c
njs/njs_regexp.c
njs/test/njs_unit_test.c

index 284a66fac0470e872afa3533b93d6774730f0f51..e3140e70a41fc06b5af15b56b4c38f9c08bba29c 100644 (file)
--- a/njs/njs.c
+++ b/njs/njs.c
@@ -255,6 +255,8 @@ njs_vm_compile(njs_vm_t *vm, u_char **start, u_char *end)
         goto fail;
     }
 
+    parser->lexer = NULL;
+
     scope = parser->scope;
 
     ret = njs_variables_scope_reference(vm, scope);
@@ -327,7 +329,9 @@ njs_vm_clone(njs_vm_t *vm, njs_external_ptr_t external)
         nvm->mem_pool = nmp;
 
         nvm->shared = vm->shared;
+
         nvm->trace = vm->trace;
+        nvm->trace.data = nvm;
 
         nvm->variables_hash = vm->variables_hash;
         nvm->values_hash = vm->values_hash;
index d8249ba7ed5238ae48a4988940f917a1e874dded..483778a5ac9d55976d8cc34d483b25f6a54a7ee1 100644 (file)
@@ -2771,7 +2771,7 @@ njs_parser_trace_handler(nxt_trace_t *trace, nxt_trace_data_t *td,
     trace = trace->next;
     p = trace->handler(trace, td, p);
 
-    if (vm->parser != NULL) {
+    if (vm->parser != NULL && vm->parser->lexer != NULL) {
         lexer = vm->parser->lexer;
 
         if (lexer->file.length != 0) {
index bce162ce40d3374edd7b93b385411151f45e0738..457836b4a1328226a2a62d4b32bdefd70f04ee97 100644 (file)
@@ -376,7 +376,7 @@ njs_regexp_compile_trace_handler(nxt_trace_t *trace, nxt_trace_data_t *td,
     trace = trace->next;
     p = trace->handler(trace, td, start);
 
-    if (vm->parser != NULL) {
+    if (vm->parser != NULL && vm->parser->lexer != NULL) {
         njs_syntax_error(vm, "%*s in %uD", p - start, start,
                          vm->parser->lexer->line);
 
index 3c5ab0bdf0a897dff70e1f1af4ce666fa886411b..f468c07713f2f555ed1988b6d939d487004f8670 100644 (file)
@@ -6651,6 +6651,9 @@ static njs_unit_test_t  njs_test[] =
     { nxt_string("new RegExp('', 'x')"),
       nxt_string("SyntaxError: Invalid RegExp flags \"x\"") },
 
+    { nxt_string("new RegExp('[')"),
+      nxt_string("SyntaxError: pcre_compile(\"[\") failed: missing terminating ] for character class") },
+
     { nxt_string("[0].map(RegExp().toString)"),
       nxt_string("TypeError: \"this\" argument is not a regexp") },