aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteve Bennett <steveb@workware.net.au>2018-01-18 08:41:24 +1000
committerSteve Bennett <steveb@workware.net.au>2018-01-18 11:01:15 +1000
commitef66afcaf2969c9780cd2560a99f23d2b3635ea0 (patch)
treeb591f474513999558bd138fd8e32e3bdcbbf8c51
parent88c5e1f7e0341d4f16dbe54a8f94293a641a7850 (diff)
downloadjimtcl-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.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/jim.c b/jim.c
index 7de75e6..9ae9063 100644
--- a/jim.c
+++ b/jim.c
@@ -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++;