Change 13965 by jhi@alpha on 2001/12/30 23:12:17
Four wrongs can make a right.
Affected files ...
.... //depot/perl/regexec.c#225 edit
.... //depot/perl/utf8.c#139 edit
Differences ...
==== //depot/perl/regexec.c#225 (text) ====
Index: perl/regexec.c
--- perl/regexec.c.~1~ Sun Dec 30 16:15:05 2001
+++ perl/regexec.c Sun Dec 30 16:15:05 2001
@@ -979,8 +979,8 @@
while (s <= e) {
if ( utf8_to_uvchr((U8*)s, &len) == c1
&& (ln == len ||
- ibcmp_utf8(s, do_utf8, (I32)(strend - s),
- m, UTF, (I32)ln))
+ !ibcmp_utf8(s, do_utf8, (I32)(strend - s),
+ m, UTF, (I32)ln))
&& (norun || regtry(prog, s)) )
goto got_it;
s += len;
@@ -1002,8 +1002,9 @@
c == (UV)UNICODE_GREEK_SMALL_LETTER_FINAL_SIGMA)
c = (UV)UNICODE_GREEK_SMALL_LETTER_SIGMA;
if ( (c == c1 || c == c2 || f == c1 || f == c2)
- && ibcmp_utf8(s, do_utf8, (I32)(strend - s),
- m, UTF, (I32)ln)
+ && (ln == len ||
+ !ibcmp_utf8(s, do_utf8, (I32)(strend - s),
+ m, UTF, (I32)ln))
&& (norun || regtry(prog, s)) )
goto got_it;
s += len;
==== //depot/perl/utf8.c#139 (text) ====
Index: perl/utf8.c
--- perl/utf8.c.~1~ Sun Dec 30 16:15:05 2001
+++ perl/utf8.c Sun Dec 30 16:15:05 2001
@@ -1668,7 +1668,7 @@
{
register U8 *a = (U8*)s1;
register U8 *b = (U8*)s2;
- register U8 *ae = b + len1;
+ register U8 *ae = a + len1;
register U8 *be = b + len2;
STRLEN la, lb;
UV ca, cb;
@@ -1703,7 +1703,8 @@
else
ulen2 = 1;
if (ulen1 != ulen2
- || (ulen1 == 1 && PL_fold[ca] != PL_fold[cb])
+ || (ca < 256 && cb < 256 &&
+ PL_fold[ca] != PL_fold[cb])
|| memNE((char *)tmpbuf1, (char *)tmpbuf2, ulen1))
return 1; /* mismatch */
}
End of Patch.