aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSean Dewar <seandewar@users.noreply.github.com>2021-07-29 22:54:47 +0100
committerSean Dewar <seandewar@users.noreply.github.com>2021-09-15 22:57:47 +0100
commitbd9c787b4f3ec6d539246c24499bdf80c85248cf (patch)
tree3dd40ef5d120181c2d5169ecc1ed15d3970a4837 /src
parent23f5999d28cdee049661ed38e22812a063e78fad (diff)
downloadrneovim-bd9c787b4f3ec6d539246c24499bdf80c85248cf.tar.gz
rneovim-bd9c787b4f3ec6d539246c24499bdf80c85248cf.tar.bz2
rneovim-bd9c787b4f3ec6d539246c24499bdf80c85248cf.zip
vim-patch:8.1.0802: negative index doesn't work for Blob
Problem: Negative index doesn't work for Blob. Solution: Make it work, add a test. (closes vim/vim#3856) https://github.com/vim/vim/commit/a5be9b62480a6f338a72c01e57c9edd0bca8048b Leave tv_blob_get()'s return type untouched.
Diffstat (limited to 'src')
-rw-r--r--src/nvim/eval.c8
-rw-r--r--src/nvim/eval/typval.c2
-rw-r--r--src/nvim/testdir/test_blob.vim7
3 files changed, 13 insertions, 4 deletions
diff --git a/src/nvim/eval.c b/src/nvim/eval.c
index b7dc00dc08..b16dfad48b 100644
--- a/src/nvim/eval.c
+++ b/src/nvim/eval.c
@@ -4647,9 +4647,11 @@ eval_index(
tv_blob_set_ret(rettv, blob);
}
} else {
- // The resulting variable is a string of a single
- // character. If the index is too big or negative the
- // result is empty.
+ // The resulting variable is a byte value.
+ // If the index is too big or negative that is an error.
+ if (n1 < 0) {
+ n1 = len + n1;
+ }
if (n1 < len && n1 >= 0) {
const int v = (int)tv_blob_get(rettv->vval.v_blob, n1);
tv_clear(rettv);
diff --git a/src/nvim/eval/typval.c b/src/nvim/eval/typval.c
index 68fab1dacd..5b416dfa7d 100644
--- a/src/nvim/eval/typval.c
+++ b/src/nvim/eval/typval.c
@@ -2266,7 +2266,7 @@ void tv_blob_copy(typval_T *const from, typval_T *const to)
to->vval.v_blob = NULL;
} else {
tv_blob_alloc_ret(to);
- const int len = from->vval.v_blob->bv_ga.ga_len;
+ int len = from->vval.v_blob->bv_ga.ga_len;
if (len > 0) {
to->vval.v_blob->bv_ga.ga_data
diff --git a/src/nvim/testdir/test_blob.vim b/src/nvim/testdir/test_blob.vim
index 568821f564..1faa9af32c 100644
--- a/src/nvim/testdir/test_blob.vim
+++ b/src/nvim/testdir/test_blob.vim
@@ -95,6 +95,13 @@ func Test_blob_get()
call assert_equal(999, get(b, 5, 999))
call assert_equal(-1, get(b, -8))
call assert_equal(999, get(b, -8, 999))
+
+ call assert_equal(0x00, b[0])
+ call assert_equal(0x22, b[2])
+ call assert_equal(0x44, b[4])
+ call assert_equal(0x44, b[-1])
+ call assert_fails('echo b[5]', 'E979:')
+ call assert_fails('echo b[-8]', 'E979:')
endfunc
func Test_blob_to_string()