changeset 26105:fd1cbe72815a v8.2.3585

patch 8.2.3585: crash when passing float to "term_rows" of term_start() Commit: https://github.com/vim/vim/commit/88137396733896eb5e49c2b3b73d9a496d6ce49a Author: Bram Moolenaar <Bram@vim.org> Date: Fri Nov 12 16:01:15 2021 +0000 patch 8.2.3585: crash when passing float to "term_rows" of term_start() Problem: Crash when passing float to "term_rows" in the options argument of term_start(). (Virginia Senioria) Solution: Bail out if the argument is not a number. (closes #9116)
author Bram Moolenaar <Bram@vim.org>
date Fri, 12 Nov 2021 17:15:03 +0100
parents e0a8da7d5b54
children 8981c7cbea9f
files src/job.c src/terminal.c src/testdir/test_terminal.vim src/version.c
diffstat 4 files changed, 13 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/job.c
+++ b/src/job.c
@@ -424,10 +424,14 @@ get_job_options(typval_T *tv, jobopt_T *
 	    }
 	    else if (STRCMP(hi->hi_key, "term_rows") == 0)
 	    {
+		int error = FALSE;
+
 		if (!(supported2 & JO2_TERM_ROWS))
 		    break;
 		opt->jo_set2 |= JO2_TERM_ROWS;
-		opt->jo_term_rows = tv_get_number(item);
+		opt->jo_term_rows = tv_get_number_chk(item, &error);
+		if (error)
+		    return FAIL;
 	    }
 	    else if (STRCMP(hi->hi_key, "term_cols") == 0)
 	    {
--- a/src/terminal.c
+++ b/src/terminal.c
@@ -4473,7 +4473,8 @@ static VTermStateFallbacks state_fallbac
     static void *
 vterm_malloc(size_t size, void *data UNUSED)
 {
-    return alloc_clear(size);
+    // make sure that the length is not zero
+    return alloc_clear(size == 0 ? 1L : size);
 }
 
     static void
--- a/src/testdir/test_terminal.vim
+++ b/src/testdir/test_terminal.vim
@@ -467,6 +467,10 @@ func Test_terminal_size()
   bwipe!
   call assert_equal([7, 27], size)
 
+  if has('float')
+    call assert_fails("call term_start(cmd, {'term_rows': 10.0})", 'E805:')
+  endif
+
   call delete('Xtext')
 endfunc
 
--- a/src/version.c
+++ b/src/version.c
@@ -758,6 +758,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    3585,
+/**/
     3584,
 /**/
     3583,