]> git.kaiwu.me - njs.git/commitdiff
Segfault has been fixed when "if" operator has an empty "then"
authorIgor Sysoev <igor@sysoev.ru>
Mon, 8 Feb 2016 15:18:24 +0000 (18:18 +0300)
committerIgor Sysoev <igor@sysoev.ru>
Mon, 8 Feb 2016 15:18:24 +0000 (18:18 +0300)
branch.

njs/njs_generator.c
njs/test/njs_unit_test.c

index 305521c019275c3cd0a618ed25447e8b0e31631e..f5680cf9b482a311142e2a7be3d88d99c52076e0 100644 (file)
@@ -361,7 +361,7 @@ njs_generate_if_statement(njs_vm_t *vm, njs_parser_t *parser,
     previous = (u_char *) cond_jump;
     label = &cond_jump->offset;
 
-    if (node->right->token == NJS_TOKEN_BRANCHING) {
+    if (node->right != NULL && node->right->token == NJS_TOKEN_BRANCHING) {
 
         /* The "then" branch in a case of "if/then/else" statement. */
 
index 176d30d3f4506ecf303035307b682af9daf0a6de..ceb17dda8b0a75948ea87d2411e8be29a15a3b01 100644 (file)
@@ -1387,13 +1387,30 @@ static njs_unit_test_t  njs_test[] =
     { nxt_string("var a \n if (!a) a = 3; a"),
       nxt_string("3") },
 
-    { nxt_string("a = 1; if (true) a = 2; else a = 3; a"),
+    /* if. */
+
+    { nxt_string("if (0);"),
+      nxt_string("undefined") },
+
+    { nxt_string("if (0) {}"),
+      nxt_string("undefined") },
+
+    { nxt_string("if (0);else;"),
+      nxt_string("undefined") },
+
+    { nxt_string("var a = 1; if (true); else a = 2; a"),
+      nxt_string("1") },
+
+    { nxt_string("var a = 1; if (false); else a = 2; a"),
+      nxt_string("2") },
+
+    { nxt_string("var a = 1; if (true) a = 2; else a = 3; a"),
       nxt_string("2") },
 
-    { nxt_string("a = 3; if (true) if (false); else a = 2; a"),
+    { nxt_string("var a = 3; if (true) if (false); else a = 2; a"),
       nxt_string("2") },
 
-    { nxt_string("a = 3; if (true) if (false); else; a = 2; a"),
+    { nxt_string("var a = 3; if (true) if (false); else; a = 2; a"),
       nxt_string("2") },
 
     /* switch. */