diff src/evalfunc.c @ 15468:1550cc188ff6 v8.1.0742

patch 8.1.0742: not all Blob operations are tested commit https://github.com/vim/vim/commit/05500ece6282407f9f7227aaf564e24147326863 Author: Bram Moolenaar <Bram@vim.org> Date: Sun Jan 13 19:10:33 2019 +0100 patch 8.1.0742: not all Blob operations are tested Problem: Not all Blob operations are tested. Solution: Add more testing for Blob.
author Bram Moolenaar <Bram@vim.org>
date Sun, 13 Jan 2019 19:15:06 +0100
parents f01eb1aed348
children 55ccc2d353bd
line wrap: on
line diff
--- a/src/evalfunc.c
+++ b/src/evalfunc.c
@@ -1258,8 +1258,14 @@ f_add(typval_T *argvars, typval_T *rettv
 		&& !tv_check_lock(b->bv_lock,
 					 (char_u *)N_("add() argument"), TRUE))
 	{
-	    ga_append(&b->bv_ga, (char_u)tv_get_number(&argvars[1]));
-	    copy_tv(&argvars[0], rettv);
+	    int		error = FALSE;
+	    varnumber_T n = tv_get_number_chk(&argvars[1], &error);
+
+	    if (!error)
+	    {
+		ga_append(&b->bv_ga, (int)n);
+		copy_tv(&argvars[0], rettv);
+	    }
 	}
     }
     else
@@ -3196,7 +3202,6 @@ f_empty(typval_T *argvars, typval_T *ret
 
 	case VAR_BLOB:
 	    n = argvars[0].vval.v_blob == NULL
-		|| argvars[0].vval.v_blob->bv_ga.ga_data == NULL
 		|| argvars[0].vval.v_blob->bv_ga.ga_len == 0;
 	    break;
 
@@ -7029,6 +7034,13 @@ f_index(typval_T *argvars, typval_T *ret
 	b = argvars[0].vval.v_blob;
 	if (b == NULL)
 	    return;
+	if (start < 0)
+	{
+	    start = blob_len(b) + start;
+	    if (start < 0)
+		start = 0;
+	}
+
 	for (idx = start; idx < blob_len(b); ++idx)
 	{
 	    tv.v_type = VAR_NUMBER;