diff src/eval.c @ 15496:f1c33409e908 v8.1.0756

patch 8.1.0756: copy() does not make a copy of a Blob commit https://github.com/vim/vim/commit/3d28b58c519c9fc3427587201423c74746cc219e Author: Bram Moolenaar <Bram@vim.org> Date: Tue Jan 15 22:44:17 2019 +0100 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.
author Bram Moolenaar <Bram@vim.org>
date Tue, 15 Jan 2019 22:45:05 +0100
parents 98c35d312987
children 99a4cc4782ac
line wrap: on
line diff
--- a/src/eval.c
+++ b/src/eval.c
@@ -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;