diff options
author | Sean Dewar <seandewar@users.noreply.github.com> | 2020-11-25 16:21:00 +0000 |
---|---|---|
committer | Sean Dewar <seandewar@users.noreply.github.com> | 2021-09-15 21:54:00 +0100 |
commit | 2b98bdd75b7ffc8c876d1e03c96a4edc4c1e1b12 (patch) | |
tree | fa4ebe55bdea5b70344e312210a54d2be9b16563 /src/nvim/eval.c | |
parent | c1b8731ece81cdbc43fbb6050eaf12e84abdc4b0 (diff) | |
download | rneovim-2b98bdd75b7ffc8c876d1e03c96a4edc4c1e1b12.tar.gz rneovim-2b98bdd75b7ffc8c876d1e03c96a4edc4c1e1b12.tar.bz2 rneovim-2b98bdd75b7ffc8c876d1e03c96a4edc4c1e1b12.zip |
vim-patch:8.1.0756: copy() does not make a copy of a Blob
Problem: copy() does not make a copy of a Blob.
Solution: Make a copy.
https://github.com/vim/vim/commit/3d28b58c519c9fc3427587201423c74746cc219e
Replace vim_memsave() with xmemdup().
Diffstat (limited to 'src/nvim/eval.c')
-rw-r--r-- | src/nvim/eval.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/src/nvim/eval.c b/src/nvim/eval.c index eb8f0406c4..35c3b1b876 100644 --- a/src/nvim/eval.c +++ b/src/nvim/eval.c @@ -9700,7 +9700,6 @@ int var_item_copy(const vimconv_T *const conv, case VAR_PARTIAL: case VAR_BOOL: case VAR_SPECIAL: - case VAR_BLOB: tv_copy(from, to); break; case VAR_STRING: @@ -9734,6 +9733,19 @@ int var_item_copy(const vimconv_T *const conv, ret = FAIL; } break; + case VAR_BLOB: + to->v_type = VAR_BLOB; + if (from->vval.v_blob == NULL) { + to->vval.v_blob = NULL; + } else { + tv_blob_alloc_ret(to); + const int len = from->vval.v_blob->bv_ga.ga_len; + + to->vval.v_blob->bv_ga.ga_data + = xmemdup(from->vval.v_blob->bv_ga.ga_data, (size_t)len); + to->vval.v_blob->bv_ga.ga_len = len; + } + break; case VAR_DICT: to->v_type = VAR_DICT; to->v_lock = VAR_UNLOCKED; |