summaryrefslogtreecommitdiff
path: root/jim.c
diff options
context:
space:
mode:
authorSteve Bennett <steveb@workware.net.au>2017-05-11 21:21:10 +1000
committerSteve Bennett <steveb@workware.net.au>2017-05-12 13:01:34 +1000
commit1d6b931d0c873bbad193677734dc9d352628577b (patch)
tree8a24462fd66b26316e7d1caf8d9b01433c5db15e /jim.c
parent31a9f433f06b8cc426d281436a628a5fdd3bf755 (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.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/jim.c b/jim.c
index 691f635..51f3569 100644
--- a/jim.c
+++ b/jim.c
@@ -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;