# HG changeset patch # User Bram Moolenaar # Date 1381067171 -7200 # Node ID e7a2f217a385e6aebfddc4d29182924ac017d262 # Parent 173c9c860e42e2af31d598aa6924b99d7e73bd1b updated for version 7.4.051 Problem: Syntax highlighting a Yaml file causes a crash. (Blake Preston) Solution: Copy the pim structure before calling addstate() to avoid it becoming invalide when the state list is reallocated. diff --git a/src/regexp_nfa.c b/src/regexp_nfa.c --- a/src/regexp_nfa.c +++ b/src/regexp_nfa.c @@ -6458,6 +6458,7 @@ nfa_regmatch(prog, start, submatch, m) if (add_state != NULL) { nfa_pim_T *pim; + nfa_pim_T pim_copy; if (t->pim.result == NFA_PIM_UNUSED) pim = NULL; @@ -6531,6 +6532,15 @@ nfa_regmatch(prog, start, submatch, m) pim = NULL; } + /* If "pim" points into l->t it will become invalid when + * adding the state causes the list to be reallocated. Make a + * local copy to avoid that. */ + if (pim == &t->pim) + { + copy_pim(&pim_copy, pim); + pim = &pim_copy; + } + if (add_here) addstate_here(thislist, add_state, &t->subs, pim, &listidx); else diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -739,6 +739,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 51, +/**/ 50, /**/ 49,