patch 9.1.1553: Vim9: crash when accessing a variable in if condition
Commit:
https://github.com/vim/vim/commit/7dd8ee2103cb3a9c92c768b8d92c997ae6c47c1c
Author: Yegappan Lakshmanan <[email protected]>
Date: Wed Jul 16 18:34:59 2025 +0200
patch 9.1.1553: Vim9: crash when accessing a variable in if condition
Problem: Vim9: crash when accessing a variable in if condition
(lxhillwind)
Solution: Skip indexing a list/tuple/dict/blob when short-circuiting an
if condition check (Yegappan Lakshmanan)
fixes: #17756
closes: #17768
Signed-off-by: Yegappan Lakshmanan <[email protected]>
Signed-off-by: Christian Brabandt <[email protected]>
diff --git a/src/po/vim.pot b/src/po/vim.pot
index 4a9a20bcd..43e194e92 100644
--- a/src/po/vim.pot
+++ b/src/po/vim.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION
"
"Report-Msgid-Bugs-To:
"
-"POT-Creation-Date: 2025-07-15 21:50+0200
"
+"POT-Creation-Date: 2025-07-16 18:34+0200
"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE
"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>
"
"Language-Team: LANGUAGE <[email protected]>
"
@@ -4257,327 +4257,327 @@ msgstr ""
msgid "%s (%s, compiled %s)"
msgstr ""
-#: ../version.c:4038
+#: ../version.c:4040
msgid ""
"
"
"MS-Windows ARM64 GUI/console version"
msgstr ""
-#: ../version.c:4040
+#: ../version.c:4042
msgid ""
"
"
"MS-Windows 64-bit GUI/console version"
msgstr ""
-#: ../version.c:4043
+#: ../version.c:4045
msgid ""
"
"
"MS-Windows 32-bit GUI/console version"
msgstr ""
-#: ../version.c:4048
+#: ../version.c:4050
msgid ""
"
"
"MS-Windows ARM64 GUI version"
msgstr ""
-#: ../version.c:4050
+#: ../version.c:4052
msgid ""
"
"
"MS-Windows 64-bit GUI version"
msgstr ""
-#: ../version.c:4053
+#: ../version.c:4055
msgid ""
"
"
"MS-Windows 32-bit GUI version"
msgstr ""
-#: ../version.c:4057
+#: ../version.c:4059
msgid " with OLE support"
msgstr ""
-#: ../version.c:4062
+#: ../version.c:4064
msgid ""
"
"
"MS-Windows ARM64 console version"
msgstr ""
-#: ../version.c:4064
+#: ../version.c:4066
msgid ""
"
"
"MS-Windows 64-bit console version"
msgstr ""
-#: ../version.c:4067
+#: ../version.c:4069
msgid ""
"
"
"MS-Windows 32-bit console version"
msgstr ""
-#: ../version.c:4073
+#: ../version.c:4075
msgid ""
"
"
"macOS version"
msgstr ""
-#: ../version.c:4075
+#: ../version.c:4077
msgid ""
"
"
"macOS version w/o darwin feat."
msgstr ""
-#: ../version.c:4085
+#: ../version.c:4087
msgid ""
"
"
"OpenVMS version"
msgstr ""
-#: ../version.c:4100
+#: ../version.c:4102
msgid ""
"
"
"Included patches: "
msgstr ""
-#: ../version.c:4125
+#: ../version.c:4127
msgid ""
"
"
"Extra patches: "
msgstr ""
-#: ../version.c:4137 ../version.c:4448
+#: ../version.c:4139 ../version.c:4450
msgid "Modified by "
msgstr ""
-#: ../version.c:4144
+#: ../version.c:4146
msgid ""
"
"
"Compiled "
msgstr ""
-#: ../version.c:4147
+#: ../version.c:4149
msgid "by "
msgstr ""
-#: ../version.c:4159
+#: ../version.c:4161
msgid ""
"
"
"Huge version "
msgstr ""
-#: ../version.c:4161
+#: ../version.c:4163
msgid ""
"
"
"Normal version "
msgstr ""
-#: ../version.c:4163
+#: ../version.c:4165
msgid ""
"
"
"Tiny version "
msgstr ""
-#: ../version.c:4166
+#: ../version.c:4168
msgid "without GUI."
msgstr ""
-#: ../version.c:4169
+#: ../version.c:4171
msgid "with GTK3 GUI."
msgstr ""
-#: ../version.c:4171
+#: ../version.c:4173
msgid "with GTK2-GNOME GUI."
msgstr ""
-#: ../version.c:4173
+#: ../version.c:4175
msgid "with GTK2 GUI."
msgstr ""
-#: ../version.c:4176
+#: ../version.c:4178
msgid "with X11-Motif GUI."
msgstr ""
-#: ../version.c:4178
+#: ../version.c:4180
msgid "with Haiku GUI."
msgstr ""
-#: ../version.c:4180
+#: ../version.c:4182
msgid "with Photon GUI."
msgstr ""
-#: ../version.c:4182
+#: ../version.c:4184
msgid "with GUI."
msgstr ""
-#: ../version.c:4184
+#: ../version.c:4186
msgid " Features included (+) or not (-):
"
msgstr ""
-#: ../version.c:4191
+#: ../version.c:4193
msgid " system vimrc file: \""
msgstr ""
-#: ../version.c:4196
+#: ../version.c:4198
msgid " user vimrc file: \""
msgstr ""
-#: ../version.c:4201
+#: ../version.c:4203
msgid " 2nd user vimrc file: \""
msgstr ""
-#: ../version.c:4206 ../version.c:4213 ../version.c:4217
+#: ../version.c:4208 ../version.c:4215 ../version.c:4219
msgid " 3rd user vimrc file: \""
msgstr ""
-#: ../version.c:4209
+#: ../version.c:4211
msgid " 4th user vimrc file: \""
msgstr ""
-#: ../version.c:4222
+#: ../version.c:4224
msgid " user exrc file: \""
msgstr ""
-#: ../version.c:4227
+#: ../version.c:4229
msgid " 2nd user exrc file: \""
msgstr ""
-#: ../version.c:4233
+#: ../version.c:4235
msgid " system gvimrc file: \""
msgstr ""
-#: ../version.c:4237
+#: ../version.c:4239
msgid " user gvimrc file: \""
msgstr ""
-#: ../version.c:4241
+#: ../version.c:4243
msgid "2nd user gvimrc file: \""
msgstr ""
-#: ../version.c:4246
+#: ../version.c:4248
msgid "3rd user gvimrc file: \""
msgstr ""
-#: ../version.c:4251
+#: ../version.c:4253
msgid " defaults file: \""
msgstr ""
-#: ../version.c:4256
+#: ../version.c:4258
msgid " system menu file: \""
msgstr ""
-#: ../version.c:4264
+#: ../version.c:4266
msgid " fall-back for $VIM: \""
msgstr ""
-#: ../version.c:4270
+#: ../version.c:4272
msgid " f-b for $VIMRUNTIME: \""
msgstr ""
-#: ../version.c:4274
+#: ../version.c:4276
msgid "Compilation: "
msgstr ""
-#: ../version.c:4280
+#: ../version.c:4282
msgid "Compiler: "
msgstr ""
-#: ../version.c:4285
+#: ../version.c:4287
msgid "Linking: "
msgstr ""
-#: ../version.c:4290
+#: ../version.c:4292
msgid " DEBUG BUILD"
msgstr ""
-#: ../version.c:4326
+#: ../version.c:4328
msgid "VIM - Vi IMproved"
msgstr ""
-#: ../version.c:4328
+#: ../version.c:4330
msgid "version "
msgstr ""
-#: ../version.c:4329
+#: ../version.c:4331
msgid "by Bram Moolenaar et al."
msgstr ""
-#: ../version.c:4333
+#: ../version.c:4335
msgid "Vim is open source and freely distributable"
msgstr ""
-#: ../version.c:4335
+#: ../version.c:4337
msgid "Help poor children in Uganda!"
msgstr ""
-#: ../version.c:4336
+#: ../version.c:4338
msgid "type :help iccf<Enter> for information "
msgstr ""
-#: ../version.c:4338
+#: ../version.c:4340
msgid "type :q<Enter> to exit "
msgstr ""
-#: ../version.c:4339
+#: ../version.c:4341
msgid "type :help<Enter> or <F1> for on-line help"
msgstr ""
-#: ../version.c:4340
+#: ../version.c:4342
msgid "type :help version9<Enter> for version info"
msgstr ""
-#: ../version.c:4343
+#: ../version.c:4345
msgid "Running in Vi compatible mode"
msgstr ""
-#: ../version.c:4344
+#: ../version.c:4346
msgid "type :set nocp<Enter> for Vim defaults"
msgstr ""
-#: ../version.c:4345
+#: ../version.c:4347
msgid "type :help cp-default<Enter> for info on this"
msgstr ""
-#: ../version.c:4360
+#: ../version.c:4362
msgid "menu Help->Orphans for information "
msgstr ""
-#: ../version.c:4362
+#: ../version.c:4364
msgid "Running modeless, typed text is inserted"
msgstr ""
-#: ../version.c:4363
+#: ../version.c:4365
msgid "menu Edit->Global Settings->Toggle Insert Mode "
msgstr ""
-#: ../version.c:4364
+#: ../version.c:4366
msgid " for two modes "
msgstr ""
-#: ../version.c:4368
+#: ../version.c:4370
msgid "menu Edit->Global Settings->Toggle Vi Compatible"
msgstr ""
-#: ../version.c:4369
+#: ../version.c:4371
msgid " for Vim defaults "
msgstr ""
-#: ../version.c:4410
+#: ../version.c:4412
msgid "Sponsor Vim development!"
msgstr ""
-#: ../version.c:4411
+#: ../version.c:4413
msgid "Become a registered Vim user!"
msgstr ""
-#: ../version.c:4414
+#: ../version.c:4416
msgid "type :help sponsor<Enter> for information "
msgstr ""
-#: ../version.c:4415
+#: ../version.c:4417
msgid "type :help register<Enter> for information "
msgstr ""
-#: ../version.c:4417
+#: ../version.c:4419
msgid "menu Help->Sponsor/Register for information "
msgstr ""
diff --git a/src/testdir/test_vim9_script.vim b/src/testdir/test_vim9_script.vim
index 2e70a3ba9..268ceb482 100644
--- a/src/testdir/test_vim9_script.vim
+++ b/src/testdir/test_vim9_script.vim
@@ -5361,6 +5361,78 @@ def Test_len_func_shortcircuit()
assert_equal('match', Len_Or2_Cond())
enddef
+" Test for skipping list/tuple/dict/blob indexing when short circuiting a if
+" condition check.
+def Test_if_cond_shortcircuit_skip_indexing()
+ # indexing a list
+ var lines =<< trim END
+ vim9script
+ def Foo(): string
+ const l = [false]
+ if false && l[0]
+ return 'failed'
+ endif
+ if true || l[0]
+ return 'passed'
+ endif
+ return 'failed'
+ enddef
+ assert_equal('passed', Foo())
+ END
+ v9.CheckSourceSuccess(lines)
+
+ # indexing a tuple
+ lines =<< trim END
+ vim9script
+ def Foo(): string
+ const t = (false)
+ if false && t[0]
+ return 'failed'
+ endif
+ if true || t[0]
+ return 'passed'
+ endif
+ return 'failed'
+ enddef
+ assert_equal('passed', Foo())
+ END
+ v9.CheckSourceSuccess(lines)
+
+ # indexing a dict
+ lines =<< trim END
+ vim9script
+ def Foo(): string
+ const d = {x: false}
+ if false && d['x']
+ return 'failed'
+ endif
+ if true || d['x']
+ return 'passed'
+ endif
+ return 'failed'
+ enddef
+ assert_equal('passed', Foo())
+ END
+ v9.CheckSourceSuccess(lines)
+
+ # indexing a blob
+ lines =<< trim END
+ vim9script
+ def Foo(): string
+ const b = 0z00
+ if false && b[0]
+ return 'failed'
+ endif
+ if true || b[0]
+ return 'passed'
+ endif
+ return 'failed'
+ enddef
+ assert_equal('passed', Foo())
+ END
+ v9.CheckSourceSuccess(lines)
+enddef
+
" Keep this last, it messes up highlighting.
def Test_substitute_cmd()
new
diff --git a/src/version.c b/src/version.c
index 98c397cb6..1ffb15426 100644
--- a/src/version.c
+++ b/src/version.c
@@ -719,6 +719,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
+/**/
+ 1553,
/**/
1552,
/**/
diff --git a/src/vim9expr.c b/src/vim9expr.c
index 33c0dafb7..715771c7d 100644
--- a/src/vim9expr.c
+++ b/src/vim9expr.c
@@ -2684,7 +2684,8 @@ compile_subscript(
if (generate_instr(cctx, ISN_CLEARDICT) == NULL)
return FAIL;
}
- if (compile_member(is_slice, &keeping_dict, cctx) == FAIL)
+ if (cctx->ctx_skip != SKIP_YES
+ && compile_member(is_slice, &keeping_dict, cctx) == FAIL)
return FAIL;
}
else if (*p == '.' && p[1] != '.')
--
--
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
---
You received this message because you are subscribed to the Google Groups
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion visit
https://groups.google.com/d/msgid/vim_dev/E1uc5Fk-009UFQ-2q%40256bit.org.