Bug: wrong initialization in result from 'gmatch'

Function returned by 'string.gmatch' can be left in an inconsistent
state after an error.
This commit is contained in:
Roberto Ierusalimschy
2026-04-01 15:01:58 -03:00
parent f1bb2773bb
commit efddc2309c
2 changed files with 18 additions and 2 deletions
+8 -2
View File
@@ -757,19 +757,25 @@ static int nospecials (const char *p, size_t l) {
}
/*
** Prepare state for matches. These fields are not affected by each match.
*/
static void prepstate (MatchState *ms, lua_State *L,
const char *s, size_t ls, const char *p, size_t lp) {
ms->L = L;
ms->matchdepth = MAXCCALLS;
ms->src_init = s;
ms->src_end = s + ls;
ms->p_end = p + lp;
}
/*
** (Re)prepare state for a match, setting fields that change during
** each match.
*/
static void reprepstate (MatchState *ms) {
ms->matchdepth = MAXCCALLS;
ms->level = 0;
lua_assert(ms->matchdepth == MAXCCALLS);
}