forked from aniani/vim
patch 9.0.0750: crash when popup closed in callback
Problem: Crash when popup closed in callback. (Maxim Kim) Solution: In syntax_end_parsing() check that syn_block is valid.
This commit is contained in:
parent
975a665d48
commit
0abd6cf62d
@ -2486,7 +2486,7 @@ win_update(win_T *wp)
|
|||||||
// Let the syntax stuff know we skipped a few lines.
|
// Let the syntax stuff know we skipped a few lines.
|
||||||
if (syntax_last_parsed != 0 && syntax_last_parsed + 1 < lnum
|
if (syntax_last_parsed != 0 && syntax_last_parsed + 1 < lnum
|
||||||
&& syntax_present(wp))
|
&& syntax_present(wp))
|
||||||
syntax_end_parsing(syntax_last_parsed + 1);
|
syntax_end_parsing(wp, syntax_last_parsed + 1);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Display one line.
|
// Display one line.
|
||||||
@ -2601,7 +2601,7 @@ win_update(win_T *wp)
|
|||||||
#ifdef FEAT_SYN_HL
|
#ifdef FEAT_SYN_HL
|
||||||
// Let the syntax stuff know we stop parsing here.
|
// Let the syntax stuff know we stop parsing here.
|
||||||
if (syntax_last_parsed != 0 && syntax_present(wp))
|
if (syntax_last_parsed != 0 && syntax_present(wp))
|
||||||
syntax_end_parsing(syntax_last_parsed + 1);
|
syntax_end_parsing(wp, syntax_last_parsed + 1);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// If we didn't hit the end of the file, and we didn't finish the last
|
// If we didn't hit the end of the file, and we didn't finish the last
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
void syntax_start(win_T *wp, linenr_T lnum);
|
void syntax_start(win_T *wp, linenr_T lnum);
|
||||||
void syn_stack_free_all(synblock_T *block);
|
void syn_stack_free_all(synblock_T *block);
|
||||||
void syn_stack_apply_changes(buf_T *buf);
|
void syn_stack_apply_changes(buf_T *buf);
|
||||||
void syntax_end_parsing(linenr_T lnum);
|
void syntax_end_parsing(win_T *wp, linenr_T lnum);
|
||||||
int syntax_check_changed(linenr_T lnum);
|
int syntax_check_changed(linenr_T lnum);
|
||||||
int get_syntax_attr(colnr_T col, int *can_spell, int keep_state);
|
int get_syntax_attr(colnr_T col, int *can_spell, int keep_state);
|
||||||
void syntax_clear(synblock_T *block);
|
void syntax_clear(synblock_T *block);
|
||||||
|
@ -1542,10 +1542,12 @@ syn_stack_equal(synstate_T *sp)
|
|||||||
* lnum -> line below window
|
* lnum -> line below window
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
syntax_end_parsing(linenr_T lnum)
|
syntax_end_parsing(win_T *wp, linenr_T lnum)
|
||||||
{
|
{
|
||||||
synstate_T *sp;
|
synstate_T *sp;
|
||||||
|
|
||||||
|
if (syn_block != wp->w_s)
|
||||||
|
return; // not the right window
|
||||||
sp = syn_stack_find_entry(lnum);
|
sp = syn_stack_find_entry(lnum);
|
||||||
if (sp != NULL && sp->sst_lnum < lnum)
|
if (sp != NULL && sp->sst_lnum < lnum)
|
||||||
sp = sp->sst_next;
|
sp = sp->sst_next;
|
||||||
|
@ -695,6 +695,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 */
|
||||||
|
/**/
|
||||||
|
750,
|
||||||
/**/
|
/**/
|
||||||
749,
|
749,
|
||||||
/**/
|
/**/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user