Welcome! Log In Create A New Profile

Advanced

[njs] Removed vm->count.

Dmitry Volyntsev
August 02, 2019 01:14PM
details: https://hg.nginx.org/njs/rev/e592647bdb12
branches:
changeset: 1098:e592647bdb12
user: Dmitry Volyntsev <xeioex@nginx.com>
date: Fri Aug 02 20:12:01 2019 +0300
description:
Removed vm->count.

Previously it was used to catch infinite recursion.
This is redundant, because NJS_MAX_STACK_SIZE is used for
the same purpose.

diffstat:

src/njs_vm.h | 4 +---
src/njs_vmcode.c | 23 ++++-------------------
src/test/njs_unit_test.c | 4 ++++
3 files changed, 9 insertions(+), 22 deletions(-)

diffs (116 lines):

diff -r 219a6024c4c8 -r e592647bdb12 src/njs_vm.h
--- a/src/njs_vm.h Fri Aug 02 16:05:44 2019 +0300
+++ b/src/njs_vm.h Fri Aug 02 20:12:01 2019 +0300
@@ -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;
diff -r 219a6024c4c8 -r e592647bdb12 src/njs_vmcode.c
--- a/src/njs_vmcode.c Fri Aug 02 16:05:44 2019 +0300
+++ b/src/njs_vmcode.c Fri Aug 02 20:12:01 2019 +0300
@@ -105,13 +105,6 @@ njs_vmcode_interpreter(njs_vm_t *vm, u_c
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;
}


diff -r 219a6024c4c8 -r e592647bdb12 src/test/njs_unit_test.c
--- a/src/test/njs_unit_test.c Fri Aug 02 16:05:44 2019 +0300
+++ b/src/test/njs_unit_test.c Fri Aug 02 20:12:01 2019 +0300
@@ -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") },
_______________________________________________
nginx-devel mailing list
nginx-devel@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-devel
Subject Author Views Posted

[njs] Removed vm->count.

Dmitry Volyntsev 297 August 02, 2019 01:14PM



Sorry, you do not have permission to post/reply in this forum.

Online Users

Guests: 262
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready