From 55d30c459c878224507e90f2a6c1657cdd070668 Mon Sep 17 00:00:00 2001 From: zeertzjq Date: Tue, 28 Feb 2023 16:06:56 +0800 Subject: [PATCH] vim-patch:8.2.2783: duplicate code for setting byte in blob, blob test may fail Problem: Duplicate code for setting byte in blob, blob test may fail. Solution: Call blob_set_append(). Test sort failure with "N". https://github.com/vim/vim/commit/e8209b91b9974da95899b51dba4058b411d04d5b Co-authored-by: Bram Moolenaar --- src/nvim/eval.c | 13 +------------ src/nvim/testdir/test_blob.vim | 2 +- 2 files changed, 2 insertions(+), 13 deletions(-) diff --git a/src/nvim/eval.c b/src/nvim/eval.c index 37029e0dd7..698172442e 100644 --- a/src/nvim/eval.c +++ b/src/nvim/eval.c @@ -1620,18 +1620,7 @@ void set_var_lval(lval_T *lp, char *endp, typval_T *rettv, int copy, const bool bool error = false; const char val = (char)tv_get_number_chk(rettv, &error); if (!error) { - garray_T *const gap = &lp->ll_blob->bv_ga; - - // Allow for appending a byte. Setting a byte beyond - // the end is an error otherwise. - if (lp->ll_n1 < gap->ga_len || lp->ll_n1 == gap->ga_len) { - ga_grow(&lp->ll_blob->bv_ga, 1); - tv_blob_set(lp->ll_blob, (int)lp->ll_n1, (uint8_t)val); - if (lp->ll_n1 == gap->ga_len) { - gap->ga_len++; - } - } - // error for invalid range was already given in get_lval() + tv_blob_set_append(lp->ll_blob, (int)lp->ll_n1, (uint8_t)val); } } } else if (op != NULL && *op != '=') { diff --git a/src/nvim/testdir/test_blob.vim b/src/nvim/testdir/test_blob.vim index 99b8c6083a..b1859f9dfe 100644 --- a/src/nvim/testdir/test_blob.vim +++ b/src/nvim/testdir/test_blob.vim @@ -632,7 +632,7 @@ func Test_blob_sort() if has('float') call CheckLegacyAndVim9Failure(['call sort([1.0, 0z11], "f")'], 'E975:') endif - call CheckLegacyAndVim9Failure(['call sort(["abc", 0z11], "f")'], 'E892:') + call CheckLegacyAndVim9Failure(['call sort([11, 0z11], "N")'], 'E974:') endfunc " The following used to cause an out-of-bounds memory access