diff options
author | Steve Bennett <steveb@workware.net.au> | 2014-04-23 15:08:40 +1000 |
---|---|---|
committer | Steve Bennett <steveb@workware.net.au> | 2014-04-23 15:09:53 +1000 |
commit | 83e91c1017ea2d26f4e19a7fbb17eda318b69821 (patch) | |
tree | 61313bae1828a1be13d68d05dff8b23cf4ac3bc9 | |
parent | a79a66bd7dc1df88fe5c93d847ddffeabcffb2c8 (diff) | |
download | jimtcl-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.c | 9 |
1 files changed, 6 insertions, 3 deletions
@@ -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); |