diff options
author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2019-07-19 16:55:37 -0300 |
---|---|---|
committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2019-07-19 16:55:37 -0300 |
commit | c2680687d148820847607e13ed7100e60d94c79e (patch) | |
tree | 4a1bdc70a0f56bb1fa6dadebc90f99bb903bb548 /lpvm.c | |
parent | ec24caa52eebabbba29d96875c8c62395849b5e2 (diff) | |
download | lpeg-c2680687d148820847607e13ed7100e60d94c79e.tar.gz lpeg-c2680687d148820847607e13ed7100e60d94c79e.tar.bz2 lpeg-c2680687d148820847607e13ed7100e60d94c79e.zip |
Bug: IBackCommit must remove dynamic captures, too
Like a fail, a IBackCommit instruction must remove any dynamic capture
made inside an 'and' pattern. (The added test for this problem
needs assertions on to detect the bug.)
Diffstat (limited to 'lpvm.c')
-rw-r--r-- | lpvm.c | 2 |
1 files changed, 2 insertions, 0 deletions
@@ -320,6 +320,8 @@ const char *match (lua_State *L, const char *o, const char *s, const char *e, | |||
320 | case IBackCommit: { | 320 | case IBackCommit: { |
321 | assert(stack > getstackbase(L, ptop) && (stack - 1)->s != NULL); | 321 | assert(stack > getstackbase(L, ptop) && (stack - 1)->s != NULL); |
322 | s = (--stack)->s; | 322 | s = (--stack)->s; |
323 | if (ndyncap > 0) /* are there matchtime captures? */ | ||
324 | ndyncap -= removedyncap(L, capture, stack->caplevel, captop); | ||
323 | captop = stack->caplevel; | 325 | captop = stack->caplevel; |
324 | p += getoffset(p); | 326 | p += getoffset(p); |
325 | continue; | 327 | continue; |