0
0
mirror of https://github.com/vim/vim.git synced 2025-07-26 11:04:33 -04:00

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.
This commit is contained in:
Bram Moolenaar 2019-01-15 22:44:17 +01:00
parent 2ea773b468
commit 3d28b58c51
3 changed files with 24 additions and 1 deletions

View File

@ -8198,7 +8198,6 @@ item_copy(
case VAR_SPECIAL:
case VAR_JOB:
case VAR_CHANNEL:
case VAR_BLOB:
copy_tv(from, to);
break;
case VAR_LIST:
@ -8217,6 +8216,21 @@ item_copy(
if (to->vval.v_list == NULL)
ret = FAIL;
break;
case VAR_BLOB:
to->v_type = VAR_BLOB;
if (from->vval.v_blob == NULL)
to->vval.v_blob = NULL;
else if (rettv_blob_alloc(to) == FAIL)
ret = FAIL;
else
{
int len = from->vval.v_blob->bv_ga.ga_len;
to->vval.v_blob->bv_ga.ga_data =
vim_memsave(from->vval.v_blob->bv_ga.ga_data, len);
to->vval.v_blob->bv_ga.ga_len = len;
}
break;
case VAR_DICT:
to->v_type = VAR_DICT;
to->v_lock = 0;

View File

@ -112,7 +112,14 @@ func Test_blob_compare()
call assert_false(b1 is b2)
let b2 = b1
call assert_true(b1 == b2)
call assert_true(b1 is b2)
let b2 = copy(b1)
call assert_true(b1 == b2)
call assert_false(b1 is b2)
let b2 = b1[:]
call assert_true(b1 == b2)
call assert_false(b1 is b2)
call assert_fails('let x = b1 > b2')
call assert_fails('let x = b1 < b2')

View File

@ -795,6 +795,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
756,
/**/
755,
/**/