aboutsummaryrefslogtreecommitdiff
path: root/lpvm.c
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>2019-07-19 16:55:37 -0300
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>2019-07-19 16:55:37 -0300
commitc2680687d148820847607e13ed7100e60d94c79e (patch)
tree4a1bdc70a0f56bb1fa6dadebc90f99bb903bb548 /lpvm.c
parentec24caa52eebabbba29d96875c8c62395849b5e2 (diff)
downloadlpeg-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.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/lpvm.c b/lpvm.c
index dbe1a8e..af9e617 100644
--- a/lpvm.c
+++ b/lpvm.c
@@ -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;