]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 8.2.4847: crash when using uninitialized function pointer v8.2.4847
authorLemonBoy <thatlemon@gmail.com>
Fri, 29 Apr 2022 20:15:02 +0000 (21:15 +0100)
committerBram Moolenaar <Bram@vim.org>
Fri, 29 Apr 2022 20:15:02 +0000 (21:15 +0100)
Problem:    Crash when using uninitialized function pointer.
Solution:   Check for NULL pointer. (closes #10319, closes #10319)

src/eval.c
src/testdir/test_vim9_script.vim
src/version.c

index 61b09fb6b0cdff50a6f492290553d77db898d073..e2980a283e0b832f612e37a456f30be47ba790b6 100644 (file)
@@ -5314,7 +5314,8 @@ echo_string_core(
 
                if (echo_style)
                {
-                   r = make_ufunc_name_readable(tv->vval.v_string,
+                   r = tv->vval.v_string == NULL ? (char_u *)"function()"
+                                 : make_ufunc_name_readable(tv->vval.v_string,
                                                       buf, MAX_FUNC_NAME_LEN);
                    if (r == buf)
                    {
index e108a2ca4600218211e276c17738c1ec5fd39612..4a01daa39e6d51c68fb4de966dc8587fe257d693 100644 (file)
@@ -4115,6 +4115,38 @@ def Run_Test_misplaced_type()
   delete('XTest_misplaced_type')
 enddef
 
+" Ensure echo doesn't crash when stringifying empty variables.
+def Test_echo_uninit_variables()
+  var res: string
+
+  var var_bool: bool
+  var var_num: number
+  var var_float: float
+  var Var_func: func
+  var var_string: string
+  var var_blob: blob
+  var var_job: job
+  var var_channel: channel
+  var var_list: list<any>
+  var var_dict: dict<any>
+
+  redir => res
+  echo var_bool
+  echo var_num
+  echo var_float
+  echo Var_func
+  echo var_string
+  echo var_blob
+  echo var_job
+  echo var_channel
+  echo var_list
+  echo var_dict
+  redir END
+
+  assert_equal(['false', '0', '0.0', 'function()', '', '0z', 'no process',
+    'channel fail', '[]', '{}'], res->split('\n'))
+enddef
+
 " Keep this last, it messes up highlighting.
 def Test_substitute_cmd()
   new
index eddc6c96a3b59bf60b7f5b5a7e423e49143691fe..ee5a9ab02672fae41548fbc64ccc77a60634cfb3 100644 (file)
@@ -746,6 +746,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    4847,
 /**/
     4846,
 /**/