Skip to content

Commit 25618fc

Browse files
committed
patch 9.1.0688: Vim9: dereferences NULL pointer in check_type_is_value()
Problem: Vim9: dereferences NULL pointer in check_type_is_value() (Suyue Guo) Solution: Verify that the pointer is not Null fixes: #15540 closes: #15545 Signed-off-by: Christian Brabandt <cb@256bit.org>
1 parent dabf07e commit 25618fc

3 files changed

Lines changed: 14 additions & 2 deletions

File tree

src/testdir/test_vim9_cmd.vim

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2036,6 +2036,14 @@ def Test_no_space_after_command()
20362036
v9.CheckDefExecAndScriptFailure(lines, 'E486:', 1)
20372037
enddef
20382038

2039+
def Test_lambda_crash()
2040+
# This used to crash Vim
2041+
var lines =<< trim END
2042+
vim9 () => super => {
2043+
END
2044+
v9.CheckScriptFailureList(lines, ["E1356:", "E1405:"])
2045+
enddef
2046+
20392047
" Test for the 'previewpopup' option
20402048
def Test_previewpopup()
20412049
set previewpopup=height:10,width:60
@@ -2044,6 +2052,7 @@ def Test_previewpopup()
20442052
assert_notequal(id, 0)
20452053
assert_match('Xppfile', popup_getoptions(id).title)
20462054
popup_clear()
2055+
bw Xppfile
20472056
set previewpopup&
20482057
enddef
20492058

src/version.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -704,6 +704,8 @@ static char *(features[]) =
704704

705705
static int included_patches[] =
706706
{ /* Add new patch number below this line */
707+
/**/
708+
688,
707709
/**/
708710
687,
709711
/**/

src/vim9type.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2138,12 +2138,13 @@ check_type_is_value(type_T *type)
21382138
switch (type->tt_type)
21392139
{
21402140
case VAR_CLASS:
2141-
if (IS_ENUM(type->tt_class))
2141+
if (type->tt_class != NULL && IS_ENUM(type->tt_class))
21422142
semsg(_(e_using_enum_as_value_str),
21432143
type->tt_class->class_name);
21442144
else
21452145
semsg(_(e_using_class_as_value_str),
2146-
type->tt_class->class_name);
2146+
type->tt_class == NULL ? (char_u *)""
2147+
: type->tt_class->class_name);
21472148
return FAIL;
21482149

21492150
case VAR_TYPEALIAS:

0 commit comments

Comments
 (0)