From a286028236801749fbdc42473c8dca8c1c233508 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Mon, 23 Aug 1999 16:54:35 +0000 Subject: [PATCH] Update. 1999-08-23 Ulrich Drepper * posix/regexbug1.c: Make it an error if the test fails. 1999-08-23 Andreas Schwab Ulrich Drepper * posix/regex.c (re_match_2_internal): Correct check for charset after exactn in loop. --- ChangeLog | 10 ++++++++++ posix/regex.c | 37 +++++++++++++++++-------------------- posix/regexbug1.c | 5 ++--- 3 files changed, 29 insertions(+), 23 deletions(-) diff --git a/ChangeLog b/ChangeLog index c1384fe..9b6bcf1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +1999-08-23 Ulrich Drepper + + * posix/regexbug1.c: Make it an error if the test fails. + +1999-08-23 Andreas Schwab + Ulrich Drepper + + * posix/regex.c (re_match_2_internal): Correct check for charset + after exactn in loop. + 1999-08-22 Ulrich Drepper * sysdeps/unix/sysv/linux/powerpc/syscalls.list: Add execve syscall. diff --git a/posix/regex.c b/posix/regex.c index 99cf4c3..1bd0191 100644 --- a/posix/regex.c +++ b/posix/regex.c @@ -4833,26 +4833,23 @@ re_match_2_internal (bufp, string1, size1, string2, size2, pos, regs, stop) } else if ((re_opcode_t) *p2 == charset) { -#ifdef DEBUG - register unsigned char c - = *p2 == (unsigned char) endline ? '\n' : p2[2]; -#endif - -#if 0 - if ((re_opcode_t) p1[3] == exactn - && ! ((int) p2[1] * BYTEWIDTH > (int) p1[5] - && (p2[2 + p1[5] / BYTEWIDTH] - & (1 << (p1[5] % BYTEWIDTH))))) -#else - if ((re_opcode_t) p1[3] == exactn - && ! ((int) p2[1] * BYTEWIDTH > (int) p1[4] - && (p2[2 + p1[4] / BYTEWIDTH] - & (1 << (p1[4] % BYTEWIDTH))))) -#endif - { - p[-3] = (unsigned char) pop_failure_jump; - DEBUG_PRINT3 (" %c != %c => pop_failure_jump.\n", - c, p1[5]); + if ((re_opcode_t) p1[3] == exactn) + { + unsigned char *p1end = &p1[5] + p1[4]; + unsigned char *runp1 = &p1[5]; + + while (runp1 < p1end) + { + if ((int) p2[1] * BYTEWIDTH <= (int) *runp1 + || (p2[2 + *runp1 / BYTEWIDTH] + & (1 << (*runp1 % BYTEWIDTH))) == 0) + { + p[-3] = (unsigned char) pop_failure_jump; + DEBUG_PRINT1 (" No match => pop_failure_jump.\n"); + break; + } + ++runp1; + } } else if ((re_opcode_t) p1[3] == charset_not) diff --git a/posix/regexbug1.c b/posix/regexbug1.c index 6f7f995..8ab0bc0 100644 --- a/posix/regexbug1.c +++ b/posix/regexbug1.c @@ -23,9 +23,8 @@ main (void) if (regexec (&re, "002", 2, ma, 0) != 0) { error (0, 0, "\"0*[0-9][0-9]\" did not match \"002\""); - /* Comment the following line out until the bug is fixed. */ - //res = 1; + res = 1; } - return 0; + return res; } -- 2.7.4