Welcome! Log In Create A New Profile

Advanced

[njs] Limiting recursion depth while compiling unary expressions.

Dmitry Volyntsev
August 27, 2019 10:16AM
details: https://hg.nginx.org/njs/rev/4fd921f02096
branches:
changeset: 1144:4fd921f02096
user: Dmitry Volyntsev <xeioex@nginx.com>
date: Tue Aug 27 16:31:00 2019 +0300
description:
Limiting recursion depth while compiling unary expressions.

This extends 8057f3ad56c1 and is related to #146 issue on Github.

diffstat:

src/njs_parser_expression.c | 40 ++++++++++++++++++++++++++++++----------
1 files changed, 30 insertions(+), 10 deletions(-)

diffs (106 lines):

diff -r 12e9519e7eb4 -r 4fd921f02096 src/njs_parser_expression.c
--- a/src/njs_parser_expression.c Mon Aug 26 19:00:13 2019 +0300
+++ b/src/njs_parser_expression.c Tue Aug 27 16:31:00 2019 +0300
@@ -225,7 +225,12 @@ njs_parser_assignment_expression(njs_vm_
njs_parser_node_t *node;
njs_vmcode_operation_t operation;

+ njs_parser_enter(vm, parser);
+
token = njs_parser_conditional_expression(vm, parser, token);
+
+ njs_parser_leave(parser);
+
if (njs_slow_path(token <= NJS_TOKEN_ILLEGAL)) {
return token;
}
@@ -332,7 +337,12 @@ njs_parser_assignment_expression(njs_vm_
return token;
}

+ njs_parser_enter(vm, parser);
+
token = njs_parser_assignment_expression(vm, parser, token);
+
+ njs_parser_leave(parser);
+
if (njs_slow_path(token <= NJS_TOKEN_ILLEGAL)) {
return token;
}
@@ -494,7 +504,12 @@ njs_parser_exponential_expression(njs_vm
return token;
}

+ njs_parser_enter(vm, parser);
+
token = njs_parser_exponential_expression(vm, parser, NULL, token);
+
+ njs_parser_leave(parser);
+
if (njs_slow_path(token <= NJS_TOKEN_ILLEGAL)) {
return token;
}
@@ -558,7 +573,12 @@ njs_parser_unary_expression(njs_vm_t *vm
return next;
}

+ njs_parser_enter(vm, parser);
+
next = njs_parser_unary_expression(vm, parser, NULL, next);
+
+ njs_parser_leave(parser);
+
if (njs_slow_path(next <= NJS_TOKEN_ILLEGAL)) {
return next;
}
@@ -740,16 +760,16 @@ static njs_token_t
njs_parser_call_expression(njs_vm_t *vm, njs_parser_t *parser,
njs_token_t token)
{
+ njs_parser_enter(vm, parser);
+
if (token == NJS_TOKEN_NEW) {
token = njs_parser_new_expression(vm, parser, token);

} else {
- njs_parser_enter(vm, parser);
+ token = njs_parser_terminal(vm, parser, token);
+ }

- token = njs_parser_terminal(vm, parser, token);
-
- njs_parser_leave(parser);
- }
+ njs_parser_leave(parser);

if (njs_slow_path(token <= NJS_TOKEN_ILLEGAL)) {
return token;
@@ -868,23 +888,23 @@ njs_parser_new_expression(njs_vm_t *vm,
return token;
}

+ njs_parser_enter(vm, parser);
+
if (token == NJS_TOKEN_NEW) {
token = njs_parser_new_expression(vm, parser, token);

} else {
- njs_parser_enter(vm, parser);
-
token = njs_parser_terminal(vm, parser, token);
-
- njs_parser_leave(parser);
-
if (njs_slow_path(token <= NJS_TOKEN_ILLEGAL)) {
+ njs_parser_leave(parser);
return token;
}

token = njs_parser_property_expression(vm, parser, token);
}

+ njs_parser_leave(parser);
+
if (njs_slow_path(token <= NJS_TOKEN_ILLEGAL)) {
return token;
}
_______________________________________________
nginx-devel mailing list
nginx-devel@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-devel
Subject Author Views Posted

[njs] Limiting recursion depth while compiling unary expressions.

Dmitry Volyntsev 285 August 27, 2019 10:16AM



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

Online Users

Guests: 228
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