Patch 8.2.1537

5 views
Skip to first unread message

Bram Moolenaar

unread,
Aug 28, 2020, 5:27:58 PM8/28/20
to vim...@googlegroups.com

Patch 8.2.1537
Problem: Memory acccess error when using setcellwidths().
Solution: Use array and pointers correctly.
Files: src/mbyte.c, src/errors.h, src/testdir/test_utf8.vim


*** ../vim-8.2.1536/src/mbyte.c 2020-08-28 22:24:40.660494318 +0200
--- src/mbyte.c 2020-08-28 23:26:02.829350331 +0200
***************
*** 5421,5428 ****
static int
tv_nr_compare(const void *a1, const void *a2)
{
! listitem_T *li1 = (listitem_T *)a1;
! listitem_T *li2 = (listitem_T *)a2;

return li1->li_tv.vval.v_number - li2->li_tv.vval.v_number;
}
--- 5421,5428 ----
static int
tv_nr_compare(const void *a1, const void *a2)
{
! listitem_T *li1 = *(listitem_T **)a1;
! listitem_T *li2 = *(listitem_T **)a2;

return li1->li_tv.vval.v_number - li2->li_tv.vval.v_number;
}
***************
*** 5470,5477 ****
vim_free(ptrs);
return;
}
! for (lili = li->li_tv.vval.v_list->lv_first, i = 0; lili != NULL;
! lili = lili->li_next, ++i)
{
if (lili->li_tv.v_type != VAR_NUMBER)
break;
--- 5470,5479 ----
vim_free(ptrs);
return;
}
!
! lili = li->li_tv.vval.v_list->lv_first;
! ptrs[item] = lili;
! for (i = 0; lili != NULL; lili = lili->li_next, ++i)
{
if (lili->li_tv.v_type != VAR_NUMBER)
break;
***************
*** 5505,5511 ****
vim_free(ptrs);
return;
}
! ptrs[item++] = lili;
}

// Sort the list on the first number.
--- 5507,5513 ----
vim_free(ptrs);
return;
}
! ++item;
}

// Sort the list on the first number.
***************
*** 5520,5528 ****

// Store the items in the new table.
item = 0;
! for (li = l->lv_first; li != NULL; li = li->li_next)
{
! listitem_T *lili = li->li_tv.vval.v_list->lv_first;
varnumber_T n1;

n1 = lili->li_tv.vval.v_number;
--- 5522,5530 ----

// Store the items in the new table.
item = 0;
! for (item = 0; item < l->lv_len; ++item)
{
! listitem_T *lili = ptrs[item];
varnumber_T n1;

n1 = lili->li_tv.vval.v_number;
***************
*** 5538,5544 ****
table[item].last = lili->li_tv.vval.v_number;
lili = lili->li_next;
table[item].width = lili->li_tv.vval.v_number;
- ++item;
}

vim_free(ptrs);
--- 5540,5545 ----
*** ../vim-8.2.1536/src/errors.h 2020-08-28 21:04:20.502881357 +0200
--- src/errors.h 2020-08-28 23:24:50.869779174 +0200
***************
*** 247,253 ****
EXTERN char e_list_item_nr_cell_width_invalid[]
INIT(= N_("E1112: List item %d cell width invalid"));
EXTERN char e_overlapping_ranges_for_nr[]
! INIT(= N_("E1113: Overlapping ranges for %lx"));
EXTERN char e_only_values_of_0x100_and_higher_supported[]
INIT(= N_("E1114: Only values of 0x100 and higher supported"));
#endif
--- 247,253 ----
EXTERN char e_list_item_nr_cell_width_invalid[]
INIT(= N_("E1112: List item %d cell width invalid"));
EXTERN char e_overlapping_ranges_for_nr[]
! INIT(= N_("E1113: Overlapping ranges for 0x%lx"));
EXTERN char e_only_values_of_0x100_and_higher_supported[]
INIT(= N_("E1114: Only values of 0x100 and higher supported"));
#endif
*** ../vim-8.2.1536/src/testdir/test_utf8.vim 2020-08-28 21:04:20.502881357 +0200
--- src/testdir/test_utf8.vim 2020-08-28 23:15:05.860323641 +0200
***************
*** 148,155 ****
func Test_setcellwidths()
call setcellwidths([
\ [0x1330, 0x1330, 2],
- \ [0x1337, 0x1339, 2],
\ [9999, 10000, 1],
\])

call assert_equal(2, strwidth("\u1330"))
--- 148,155 ----
func Test_setcellwidths()
call setcellwidths([
\ [0x1330, 0x1330, 2],
\ [9999, 10000, 1],
+ \ [0x1337, 0x1339, 2],
\])

call assert_equal(2, strwidth("\u1330"))
*** ../vim-8.2.1536/src/version.c 2020-08-28 22:24:40.660494318 +0200
--- src/version.c 2020-08-28 23:14:43.844414297 +0200
***************
*** 756,757 ****
--- 756,759 ----
{ /* Add new patch number below this line */
+ /**/
+ 1537,
/**/

--
A successful man is one who makes more money than his wife can spend.
A successful woman is one who can find such a man.

/// Bram Moolenaar -- Br...@Moolenaar.net -- http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\ an exciting new programming language -- http://www.Zimbu.org ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
Reply all
Reply to author
Forward
0 new messages