@@ -2817,45 +2817,49 @@ f_insert(typval_T *argvars, typval_T *rettv)
28172817
28182818 if (argvars [0 ].v_type == VAR_BLOB )
28192819 {
2820- int val , len ;
2821- char_u * p ;
2820+ blob_T * b = argvars [0 ].vval .v_blob ;
28222821
2823- if (argvars [ 0 ]. vval . v_blob == NULL )
2822+ if (b == NULL )
28242823 {
28252824 if (in_vim9script ())
28262825 emsg (_ (e_cannot_add_to_null_blob ));
2827- return ;
28282826 }
2829-
2830- len = blob_len (argvars [0 ].vval .v_blob );
2831- if (argvars [2 ].v_type != VAR_UNKNOWN )
2827+ else if (!value_check_lock (b -> bv_lock ,
2828+ (char_u * )N_ ("insert() argument" ), TRUE))
28322829 {
2833- before = (long )tv_get_number_chk (& argvars [2 ], & error );
2830+ int val , len ;
2831+ char_u * p ;
2832+
2833+ len = blob_len (b );
2834+ if (argvars [2 ].v_type != VAR_UNKNOWN )
2835+ {
2836+ before = (long )tv_get_number_chk (& argvars [2 ], & error );
2837+ if (error )
2838+ return ; // type error; errmsg already given
2839+ if (before < 0 || before > len )
2840+ {
2841+ semsg (_ (e_invarg2 ), tv_get_string (& argvars [2 ]));
2842+ return ;
2843+ }
2844+ }
2845+ val = tv_get_number_chk (& argvars [1 ], & error );
28342846 if (error )
2835- return ; // type error; errmsg already given
2836- if (before < 0 || before > len )
2847+ return ;
2848+ if (val < 0 || val > 255 )
28372849 {
2838- semsg (_ (e_invarg2 ), tv_get_string (& argvars [2 ]));
2850+ semsg (_ (e_invarg2 ), tv_get_string (& argvars [1 ]));
28392851 return ;
28402852 }
2841- }
2842- val = tv_get_number_chk (& argvars [1 ], & error );
2843- if (error )
2844- return ;
2845- if (val < 0 || val > 255 )
2846- {
2847- semsg (_ (e_invarg2 ), tv_get_string (& argvars [1 ]));
2848- return ;
2849- }
28502853
2851- if (ga_grow (& argvars [ 0 ]. vval . v_blob -> bv_ga , 1 ) == FAIL )
2852- return ;
2853- p = (char_u * )argvars [ 0 ]. vval . v_blob -> bv_ga .ga_data ;
2854- mch_memmove (p + before + 1 , p + before , (size_t )len - before );
2855- * (p + before ) = val ;
2856- ++ argvars [ 0 ]. vval . v_blob -> bv_ga .ga_len ;
2854+ if (ga_grow (& b -> bv_ga , 1 ) == FAIL )
2855+ return ;
2856+ p = (char_u * )b -> bv_ga .ga_data ;
2857+ mch_memmove (p + before + 1 , p + before , (size_t )len - before );
2858+ * (p + before ) = val ;
2859+ ++ b -> bv_ga .ga_len ;
28572860
2858- copy_tv (& argvars [0 ], rettv );
2861+ copy_tv (& argvars [0 ], rettv );
2862+ }
28592863 }
28602864 else if (argvars [0 ].v_type != VAR_LIST )
28612865 semsg (_ (e_listblobarg ), "insert()" );
@@ -2917,7 +2921,7 @@ f_remove(typval_T *argvars, typval_T *rettv)
29172921 if (argvars [0 ].v_type == VAR_DICT )
29182922 dict_remove (argvars , rettv , arg_errmsg );
29192923 else if (argvars [0 ].v_type == VAR_BLOB )
2920- blob_remove (argvars , rettv );
2924+ blob_remove (argvars , rettv , arg_errmsg );
29212925 else if (argvars [0 ].v_type == VAR_LIST )
29222926 list_remove (argvars , rettv , arg_errmsg );
29232927 else
0 commit comments