diff options
author | Steve Bennett <steveb@workware.net.au> | 2013-12-12 00:02:29 +1000 |
---|---|---|
committer | Steve Bennett <steveb@workware.net.au> | 2013-12-12 00:02:29 +1000 |
commit | 32fc07012bd8f734e3f7c05fe2a17123c6be2baf (patch) | |
tree | 66f6ae81a87043d2df2ba84076356cd9a1514c3c | |
parent | ee08ea6a4454de6b8dca0f14446a6b8b29cc1458 (diff) | |
download | jimtcl-32fc07012bd8f734e3f7c05fe2a17123c6be2baf.zip jimtcl-32fc07012bd8f734e3f7c05fe2a17123c6be2baf.tar.gz jimtcl-32fc07012bd8f734e3f7c05fe2a17123c6be2baf.tar.bz2 |
Fix infinite loop with error in lsort -unique
Reported-by: Sergei Gavrikov <sergei.gavrikov@gmail.com>
Signed-off-by: Steve Bennett <steveb@workware.net.au>
-rw-r--r-- | jim.c | 10 | ||||
-rw-r--r-- | regtest.tcl | 5 |
2 files changed, 10 insertions, 5 deletions
@@ -6558,13 +6558,13 @@ static int ListSortElements(Jim_Interp *interp, Jim_Obj *listObjPtr, struct lsor if ((rc = setjmp(info->jmpbuf)) == 0) { qsort(vector, len, sizeof(Jim_Obj *), (qsort_comparator *) fn); - } - if (info->unique && len > 1) { - ListRemoveDuplicates(listObjPtr, fn); - } + if (info->unique && len > 1) { + ListRemoveDuplicates(listObjPtr, fn); + } - Jim_InvalidateStringRep(listObjPtr); + Jim_InvalidateStringRep(listObjPtr); + } sort_info = prev_info; return rc; diff --git a/regtest.tcl b/regtest.tcl index acda96e..a0b063c 100644 --- a/regtest.tcl +++ b/regtest.tcl @@ -219,6 +219,11 @@ puts "TEST 29 PASSED" string tolower "/mod/video/h\303\203\302\244xan_ witchcraft through the ages_20131101_0110.t" puts "TEST 30 PASSED" +# REGTEST 31 +# infinite lsort -unique with error +catch {lsort -unique -real {foo 42.0}} +puts "TEST 31 PASSED" + # TAKE THE FOLLOWING puts AS LAST LINE puts "--- ALL TESTS PASSED ---" |