aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/eval.c
diff options
context:
space:
mode:
authorSean Dewar <seandewar@users.noreply.github.com>2020-11-25 16:21:00 +0000
committerSean Dewar <seandewar@users.noreply.github.com>2021-09-15 21:54:00 +0100
commit2b98bdd75b7ffc8c876d1e03c96a4edc4c1e1b12 (patch)
treefa4ebe55bdea5b70344e312210a54d2be9b16563 /src/nvim/eval.c
parentc1b8731ece81cdbc43fbb6050eaf12e84abdc4b0 (diff)
downloadrneovim-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.c14
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;