diff options
author | Bram Moolenaar <Bram@vim.org> | 2022-08-17 15:55:51 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2022-08-17 15:55:51 +0100 |
commit | 4875d6ab068f09df88d24d81de40dcd8d56e243d (patch) | |
tree | 6f5030128980ebdb9e61141621759b5540c45708 | |
parent | 5fd6ab820b4a0aaa5c6020852f39d118375fab49 (diff) | |
download | vim-git-4875d6ab068f09df88d24d81de40dcd8d56e243d.tar.gz |
patch 9.0.0224: Using NULL pointer when skipping compiled codev9.0.0224
Problem: Using NULL pointer when skipping compiled code.
Solution: Check for skipping.
-rw-r--r-- | src/testdir/test_vim9_script.vim | 13 | ||||
-rw-r--r-- | src/version.c | 2 | ||||
-rw-r--r-- | src/vim9compile.c | 14 |
3 files changed, 25 insertions, 4 deletions
diff --git a/src/testdir/test_vim9_script.vim b/src/testdir/test_vim9_script.vim index 3199ac395..56a39efcf 100644 --- a/src/testdir/test_vim9_script.vim +++ b/src/testdir/test_vim9_script.vim @@ -2097,6 +2097,19 @@ def Test_for_skipped_block() v9.CheckDefAndScriptSuccess(lines) enddef +def Test_skipped_redir() + var lines =<< trim END + def T() + if 0 + redir =>l[0] + redir END + endif + enddef + defcompile + END + v9.CheckScriptSuccess(lines) +enddef + def Test_for_loop() var lines =<< trim END var result = '' diff --git a/src/version.c b/src/version.c index 1566e4dfc..e477f9e31 100644 --- a/src/version.c +++ b/src/version.c @@ -732,6 +732,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 224, +/**/ 223, /**/ 222, diff --git a/src/vim9compile.c b/src/vim9compile.c index d1e2c87fd..d8596e99e 100644 --- a/src/vim9compile.c +++ b/src/vim9compile.c @@ -1165,11 +1165,14 @@ generate_loadvar( generate_LOADV(cctx, name + 2); break; case dest_local: - if (lvar->lv_from_outer > 0) - generate_LOADOUTER(cctx, lvar->lv_idx, lvar->lv_from_outer, + if (cctx->ctx_skip != SKIP_YES) + { + if (lvar->lv_from_outer > 0) + generate_LOADOUTER(cctx, lvar->lv_idx, lvar->lv_from_outer, type); - else - generate_LOAD(cctx, ISN_LOAD, lvar->lv_idx, NULL, type); + else + generate_LOAD(cctx, ISN_LOAD, lvar->lv_idx, NULL, type); + } break; case dest_expr: // list or dict value should already be on the stack. @@ -1952,6 +1955,9 @@ compile_assign_unlet( } } + if (cctx->ctx_skip == SKIP_YES) + return OK; + // Load the dict or list. On the stack we then have: // - value (for assignment, not for :unlet) // - index |