diff options
author | Steve Bennett <steveb@workware.net.au> | 2018-01-18 08:41:24 +1000 |
---|---|---|
committer | Steve Bennett <steveb@workware.net.au> | 2018-01-18 11:01:15 +1000 |
commit | ef66afcaf2969c9780cd2560a99f23d2b3635ea0 (patch) | |
tree | b591f474513999558bd138fd8e32e3bdcbbf8c51 | |
parent | 88c5e1f7e0341d4f16dbe54a8f94293a641a7850 (diff) | |
download | jimtcl-ef66afcaf2969c9780cd2560a99f23d2b3635ea0.zip jimtcl-ef66afcaf2969c9780cd2560a99f23d2b3635ea0.tar.gz jimtcl-ef66afcaf2969c9780cd2560a99f23d2b3635ea0.tar.bz2 |
expr: prevent stack overflow
Limit the depth of the expressions to a reasonable level to prevent
stack overflow
Signed-off-by: Steve Bennett <steveb@workware.net.au>
-rw-r--r-- | jim.c | 5 |
1 files changed, 4 insertions, 1 deletions
@@ -8830,7 +8830,10 @@ static int ExprTreeBuildTree(Jim_Interp *interp, struct ExprBuilder *builder, in /* Calculate the stack length expected after pushing the number of expected terms */ int exp_stacklen = builder->stack.len + exp_numterms; - builder->level++; + if (builder->level++ > 200) { + Jim_SetResultString(interp, "Expression too complex", -1); + return JIM_ERR; + } while (builder->token->type != JIM_TT_EOL) { ParseToken *t = builder->token++; |