From 2d96c352cc2c3b70836d0c2c2d806d73a298406e Mon Sep 17 00:00:00 2001 From: Kyryl Melekhin Date: Thu, 21 Oct 2021 18:45:19 +0000 Subject: [PATCH] add more tests; allow \< escape out --- pike.c | 2 ++ test.sh | 42 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+) diff --git a/pike.c b/pike.c index ba30fe7..e743723 100644 --- a/pike.c +++ b/pike.c @@ -203,6 +203,8 @@ static int _compilecode(const char **re_loc, rcode *prog, int sizecode) re++; if (!*re) goto syntax_error; // Trailing backslash if (*re == '<' || *re == '>') { + if (re - *re_loc > 2 && re[-2] == '\\') + break; EMIT(PC++, *re == '<' ? WBEG : WEND); prog->len++; term = PC; diff --git a/test.sh b/test.sh index b9fd044..fa6c1a9 100755 --- a/test.sh +++ b/test.sh @@ -140,6 +140,20 @@ aaaaa(aa)aa(aa(a)a)?aa (a(a)a|(a)|a(aa)|aa){2,5} ((a)a|a(aa)|(aaaa)|(a*)){3,10} ((a)a|a(aa)|(aaaa)|(a+)){3,10} +(aa(aa){3}|(a)a+(a)|a){3,4} +((ax)+b(ax)*)* +(a*)(b?)(b+)b{3} +(a*){2,3} +(a|at|ate|aten)(ten|en|n|d) +(a|aa|aaa|aaaaa)(aa|aaaa|aaa) +(a|a.|a..|a....)(a.|a...|a..) +(a*b|b*a)(a*b|b*a) +(ab|((ab)c|abc))c* +((a*b*c*)|(a*c*b*))* +.*|.*(a|b)? +((.a|.ab)(bc.|c.)|abc.) +\\\\\\\\< +\\\\\\\\\\\\\\\\< " input="\ abcdef @@ -281,6 +295,20 @@ aaaaaaaaaa aaaaaaaaaaaaaa aaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaa +axbaxaxbaxaxaxbaxaxaxax +aaabbbbbbb +aaaaaaaaaaaaaaaaa +atend +aaaaaa +aaaaaa +bbaa +abc +abcacb +aa +xabcx +\\< +\\\\\\\\< " expect="\ (0,3) @@ -422,6 +450,20 @@ expect="\ (0,13)(12,13)(10,11)(12,13)(?,?) (0,17)(17,17)(14,15)(?,?)(?,?)(17,17) (0,17)(16,17)(14,15)(?,?)(?,?)(16,17) +(0,15)(14,15)(6,8)(8,9)(13,14) +(0,7)(0,7)(0,2)(5,7) +(0,10)(0,3)(3,4)(4,7) +(0,17)(17,17) +(0,4)(0,1)(1,4) +(0,3)(0,1)(1,3) +(0,3)(0,1)(1,3) +(0,2)(0,1)(1,2) +(0,3)(0,2)(?,?)(?,?) +(0,6)(5,6)(5,6)(?,?) +(0,2)(?,?) +(0,5)(0,5)(0,2)(2,5) +(0,2) +(2,5) (0,0) "