diff options
author | Steve Bennett <steveb@workware.net.au> | 2017-05-11 21:21:10 +1000 |
---|---|---|
committer | Steve Bennett <steveb@workware.net.au> | 2017-05-12 13:01:34 +1000 |
commit | 1d6b931d0c873bbad193677734dc9d352628577b (patch) | |
tree | 8a24462fd66b26316e7d1caf8d9b01433c5db15e /jim.c | |
parent | 31a9f433f06b8cc426d281436a628a5fdd3bf755 (diff) |
lsort: Fix a refcount issue
Only duplicate a shared object
Reported-by: Ryan Whitworth <me@ryanwhitworth.com>
Signed-off-by: Steve Bennett <steveb@workware.net.au>
Diffstat (limited to 'jim.c')
-rw-r--r-- | jim.c | 7 |
1 files changed, 5 insertions, 2 deletions
@@ -12759,6 +12759,7 @@ static int Jim_LsortCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const arg Jim_Obj *resObj; int i; int retCode; + int shared; struct lsort_info info; @@ -12824,12 +12825,14 @@ static int Jim_LsortCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const arg break; } } - resObj = Jim_DuplicateObj(interp, argv[argc - 1]); + resObj = argv[argc - 1]; + if ((shared = Jim_IsShared(resObj))) + resObj = Jim_DuplicateObj(interp, resObj); retCode = ListSortElements(interp, resObj, &info); if (retCode == JIM_OK) { Jim_SetResult(interp, resObj); } - else { + else if (shared) { Jim_FreeNewObj(interp, resObj); } return retCode; |