1
0
forked from aniani/vim

patch 9.0.0224: Using NULL pointer when skipping compiled code

Problem:    Using NULL pointer when skipping compiled code.
Solution:   Check for skipping.
This commit is contained in:
Bram Moolenaar 2022-08-17 15:55:51 +01:00
parent 5fd6ab820b
commit 4875d6ab06
3 changed files with 25 additions and 4 deletions

View File

@ -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 = ''

View File

@ -731,6 +731,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
224,
/**/
223,
/**/

View File

@ -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