aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteve Bennett <steveb@workware.net.au>2014-04-23 15:08:40 +1000
committerSteve Bennett <steveb@workware.net.au>2014-04-23 15:09:53 +1000
commit83e91c1017ea2d26f4e19a7fbb17eda318b69821 (patch)
tree61313bae1828a1be13d68d05dff8b23cf4ac3bc9
parenta79a66bd7dc1df88fe5c93d847ddffeabcffb2c8 (diff)
downloadjimtcl-83e91c1017ea2d26f4e19a7fbb17eda318b69821.zip
jimtcl-83e91c1017ea2d26f4e19a7fbb17eda318b69821.tar.gz
jimtcl-83e91c1017ea2d26f4e19a7fbb17eda318b69821.tar.bz2
jim.c: fix mem leak in foreach
In this invalid script: foreach a {0 1 2} {} {3 4 5} { # ... } Courtesy of coverity Signed-off-by: Steve Bennett <steveb@workware.net.au>
-rw-r--r--jim.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/jim.c b/jim.c
index 0837a4b..21502d5 100644
--- a/jim.c
+++ b/jim.c
@@ -11873,7 +11873,7 @@ static int JimListIterDone(Jim_Interp *interp, Jim_ListIter *iter)
/* foreach + lmap implementation. */
static int JimForeachMapHelper(Jim_Interp *interp, int argc, Jim_Obj *const *argv, int doMap)
{
- int result = JIM_ERR;
+ int result = JIM_OK;
int i, numargs;
Jim_ListIter twoiters[2]; /* Avoid allocation for a single list */
Jim_ListIter *iters;
@@ -11896,10 +11896,13 @@ static int JimForeachMapHelper(Jim_Interp *interp, int argc, Jim_Obj *const *arg
for (i = 0; i < numargs; i++) {
JimListIterInit(&iters[i], argv[i + 1]);
if (i % 2 == 0 && JimListIterDone(interp, &iters[i])) {
- Jim_SetResultString(interp, "foreach varlist is empty", -1);
- return JIM_ERR;
+ result = JIM_ERR;
}
}
+ if (result != JIM_OK) {
+ Jim_SetResultString(interp, "foreach varlist is empty", -1);
+ return result;
+ }
if (doMap) {
resultObj = Jim_NewListObj(interp, NULL, 0);