Skip to content

Commit

Permalink
patch 9.0.0224: Using NULL pointer when skipping compiled code
Browse files Browse the repository at this point in the history
Problem:    Using NULL pointer when skipping compiled code.
Solution:   Check for skipping.
  • Loading branch information
brammool committed Aug 17, 2022
1 parent 5fd6ab8 commit 4875d6a
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 4 deletions.
13 changes: 13 additions & 0 deletions src/testdir/test_vim9_script.vim
Expand Up @@ -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 = ''
Expand Down
2 changes: 2 additions & 0 deletions src/version.c
Expand Up @@ -731,6 +731,8 @@ static char *(features[]) =

static int included_patches[] =
{ /* Add new patch number below this line */
/**/
224,
/**/
223,
/**/
Expand Down
14 changes: 10 additions & 4 deletions src/vim9compile.c
Expand Up @@ -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.
Expand Down Expand Up @@ -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
Expand Down

0 comments on commit 4875d6a

Please sign in to comment.