pike.c: fix edge case

This commit is contained in:
Kyryl Melekhin
2025-11-01 23:31:14 +00:00
parent a43ab17911
commit 0b7b6b9d81
2 changed files with 8 additions and 3 deletions

8
pike.c
View File

@@ -298,6 +298,10 @@ static int compilecode(const char *re_loc, rcode *prog, int sizecode)
memcpy(&code[PC], &code[term], size*sizeof(int));
PC += size;
}
if (!mincnt) {
nojmp = 2;
mincnt++;
}
for (i = maxcnt-mincnt; i > 0; i--) {
EMIT(PC++, SPLIT);
EMIT(PC++, REL(PC, PC+((size+2)*i)));
@@ -305,10 +309,8 @@ static int compilecode(const char *re_loc, rcode *prog, int sizecode)
memcpy(&code[PC], &code[term], size*sizeof(int));
PC += size;
}
if (!mincnt && maxcnt) {
nojmp = 1;
if (nojmp == 2)
goto zcase;
}
break;
case '?':
if (PC == term)

View File

@@ -1,6 +1,7 @@
#!/bin/sh
regex="\
(aaaa){0,2}
a{0}
(aaaa){0,}
(aaaa){0,0}
@@ -209,6 +210,7 @@ aaaaa(aa)aa(aa(a)a)?aa
(((?:(?:(?:ffffff(a)?ffff)+)+?)*)*)+
"
input="\
aaaaaaaaaaaa
aaaaaaaaaa
aaaaaaaaaa
aaaaaaaaaa
@@ -417,6 +419,7 @@ fffffaffffffffff
fffffffffffffffffffffffff
"
expect="\
(0,8)(4,8)
(0,0)
(0,8)(4,8)
(0,0)(?,?)