patch 8.2.4847: crash when using uninitialized function pointer

Problem:    Crash when using uninitialized function pointer.
Solution:   Check for NULL pointer. (closes #10319, closes #10319)
diff --git a/src/eval.c b/src/eval.c
index 61b09fb..e2980a2 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -5314,7 +5314,8 @@
 
 		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)
 		    {
diff --git a/src/testdir/test_vim9_script.vim b/src/testdir/test_vim9_script.vim
index e108a2c..4a01daa 100644
--- a/src/testdir/test_vim9_script.vim
+++ b/src/testdir/test_vim9_script.vim
@@ -4115,6 +4115,38 @@
   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
diff --git a/src/version.c b/src/version.c
index eddc6c9..ee5a9ab 100644
--- a/src/version.c
+++ b/src/version.c
@@ -747,6 +747,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    4847,
+/**/
     4846,
 /**/
     4845,