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) v9.CheckDefAndScriptSuccess(lines)
enddef 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() def Test_for_loop()
var lines =<< trim END var lines =<< trim END
var result = '' var result = ''

View File

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

View File

@ -1165,11 +1165,14 @@ generate_loadvar(
generate_LOADV(cctx, name + 2); generate_LOADV(cctx, name + 2);
break; break;
case dest_local: case dest_local:
if (lvar->lv_from_outer > 0) if (cctx->ctx_skip != SKIP_YES)
generate_LOADOUTER(cctx, lvar->lv_idx, lvar->lv_from_outer, {
if (lvar->lv_from_outer > 0)
generate_LOADOUTER(cctx, lvar->lv_idx, lvar->lv_from_outer,
type); type);
else else
generate_LOAD(cctx, ISN_LOAD, lvar->lv_idx, NULL, type); generate_LOAD(cctx, ISN_LOAD, lvar->lv_idx, NULL, type);
}
break; break;
case dest_expr: case dest_expr:
// list or dict value should already be on the stack. // 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: // Load the dict or list. On the stack we then have:
// - value (for assignment, not for :unlet) // - value (for assignment, not for :unlet)
// - index // - index