]> git.kaiwu.me - njs.git/commitdiff
Removed vm->count.
authorDmitry Volyntsev <xeioex@nginx.com>
Fri, 2 Aug 2019 17:12:01 +0000 (20:12 +0300)
committerDmitry Volyntsev <xeioex@nginx.com>
Fri, 2 Aug 2019 17:12:01 +0000 (20:12 +0300)
Previously it was used to catch infinite recursion.
This is redundant, because NJS_MAX_STACK_SIZE is used for
the same purpose.

src/njs_vm.h
src/njs_vmcode.c
src/test/njs_unit_test.c

index 4b377cf7582cb4c612258b0b7f7259f7c2bd9f96..5daaaa3891117ccbb13720951e427b9e49723877 100644 (file)
@@ -8,7 +8,7 @@
 #define _NJS_VM_H_INCLUDED_
 
 
-#define NJS_MAX_STACK_SIZE       (16 * 1024 * 1024)
+#define NJS_MAX_STACK_SIZE       (256 * 1024)
 
 
 /*
@@ -229,8 +229,6 @@ struct njs_vm_s {
     /* njs_vm_t must be aligned to njs_value_t due to scratch value. */
     njs_value_t              retval;
 
-    njs_uint_t               count;
-
     njs_arr_t                *paths;
 
     u_char                   *start;
index 782cae8562dccf30b5f2b12395f654b6548b2cbe..eee0662f35c8f18a91b17b56235adfcff39ca169 100644 (file)
@@ -105,13 +105,6 @@ njs_vmcode_interpreter(njs_vm_t *vm, u_char *pc)
     njs_vmcode_try_return_t      *try_return;
     njs_vmcode_function_frame_t  *function_frame;
 
-    if (njs_slow_path(vm->count > 128)) {
-        njs_range_error(vm, "Maximum call stack size exceeded");
-        return NJS_ERROR;
-    }
-
-    vm->count++;
-
 next:
 
     for ( ;; ) {
@@ -588,8 +581,7 @@ next:
                 value2 = njs_vmcode_operand(vm, value2);
                 vm->retval = *value2;
 
-                ret = NJS_OK;
-                goto done;
+                return NJS_OK;
 
             case NJS_VMCODE_JUMP:
                 ret = (njs_jump_off_t) value2;
@@ -671,8 +663,7 @@ next:
 
                 njs_function_frame_free(vm, &frame->native);
 
-                ret = NJS_OK;
-                goto done;
+                return NJS_OK;
 
             case NJS_VMCODE_FUNCTION_FRAME:
                 function_frame = (njs_vmcode_function_frame_t *) pc;
@@ -800,7 +791,7 @@ next:
 
                 switch (ret) {
                 case NJS_OK:
-                    goto done;
+                    return NJS_OK;
                 case NJS_ERROR:
                     goto error;
                 }
@@ -822,8 +813,6 @@ next:
 
 error:
 
-    ret = NJS_ERROR;
-
     for ( ;; ) {
         frame = (njs_frame_t *) vm->top_frame;
 
@@ -864,11 +853,7 @@ error:
         }
     }
 
-done:
-
-    vm->count--;
-
-    return ret;
+    return NJS_ERROR;
 }
 
 
index 43d6b1e2ea5bb5455125165a3094d7a09a6a18c0..f3232d1ce5bc7ccc0938ba4c9ce29dd480188b9b 100644 (file)
@@ -4154,10 +4154,12 @@ static njs_unit_test_t  njs_test[] =
                  "Array.prototype.fill.call(o, 2).a"),
       njs_str("4") },
 
+#if (!NJS_HAVE_MEMORY_SANITIZER) /* MSAN limits stack size */
     { njs_str("var o = Object({length: 3});"
                  "Object.defineProperty(o, '0', {set: function(v){this[0] = 2 * v}});"
                  "Array.prototype.fill.call(o, 2)"),
       njs_str("RangeError: Maximum call stack size exceeded") },
+#endif
 
     { njs_str("var a = [];"
                  "a.filter(function(v, i, a) { return v > 1 })"),
@@ -6410,8 +6412,10 @@ static njs_unit_test_t  njs_test[] =
     { njs_str("{ function f() {} { var f }}"),
       njs_str("SyntaxError: \"f\" has already been declared in 1") },
 
+#if (!NJS_HAVE_MEMORY_SANITIZER) /* MSAN limits stack size */
     { njs_str("function f() { return f() } f()"),
       njs_str("RangeError: Maximum call stack size exceeded") },
+#endif
 
     { njs_str("function () { } f()"),
       njs_str("SyntaxError: Unexpected token \"(\" in 1") },