]> granicus.if.org Git - vim/commitdiff
patch 8.2.3449: sort fails if the sort compare function returns 999 v8.2.3449
authorYasuhiro Matsumoto <mattn.jp@gmail.com>
Sun, 19 Sep 2021 15:01:39 +0000 (17:01 +0200)
committerBram Moolenaar <Bram@vim.org>
Sun, 19 Sep 2021 15:01:39 +0000 (17:01 +0200)
Problem:    Sort fails if the sort compare function returns 999.
Solution:   Adjust value to -1 / 0 / 1. (Yasuhiro Matsumoto, closes #8884)

src/list.c
src/testdir/test_sort.vim
src/version.c

index 8e67a61db3f81fadcd66f00430ff6e6b7b37bc17..16e59837e662018748accd903cefc1c7a58c6744 100644 (file)
@@ -1945,7 +1945,13 @@ item_compare2(const void *s1, const void *s2)
     if (res == FAIL)
        res = ITEM_COMPARE_FAIL;
     else
+    {
        res = (int)tv_get_number_chk(&rettv, &sortinfo->item_compare_func_err);
+       if (res > 0)
+           res = 1;
+       else if (res < 0)
+           res = -1;
+    }
     if (sortinfo->item_compare_func_err)
        res = ITEM_COMPARE_FAIL;  // return value has wrong type
     clear_tv(&rettv);
index 47c58594d77af9261f96266903dbaae3bdf00802..82f70fff12e0588cce72d7f2d06541a164432954 100644 (file)
@@ -58,6 +58,7 @@ endfunc
 func Test_sort_numbers()
   call assert_equal([3, 13, 28], sort([13, 28, 3], 'N'))
   call assert_equal(['3', '13', '28'], sort(['13', '28', '3'], 'N'))
+  call assert_equal([3997, 4996], sort([4996, 3997], 'Compare1'))
 endfunc
 
 func Test_sort_float()
index 38f9017575e0965888258b6fe26b17d849f932bb..99a94e259a036cfe26c06272e0ad1ca911bd06dc 100644 (file)
@@ -757,6 +757,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    3449,
 /**/
     3448,
 /**/