summaryrefslogtreecommitdiff
path: root/utf8.c
diff options
context:
space:
mode:
authorYves Orton <demerphq@gmail.com>2007-12-17 16:21:46 +0100
committerRafael Garcia-Suarez <rgarciasuarez@gmail.com>2007-12-17 16:01:32 +0000
commita0a388a13daad79062b3c4b126f22d2f46fc82dd (patch)
treec1f1562353529ecc4edfee3469657379d1adf79d /utf8.c
parent5cf57fc61e657066a9798cca42453d9e2f71bd8c (diff)
downloadperl-a0a388a13daad79062b3c4b126f22d2f46fc82dd.tar.gz
Fix various bugs in regex engine with mixed utf8/latin pattern and strings. Related to [perl #36207] among others
Message-ID: <9b18b3110712170621h41de2c76k331971e3660abcb0@mail.gmail.com> p4raw-id: //depot/perl@32628
Diffstat (limited to 'utf8.c')
-rw-r--r--utf8.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/utf8.c b/utf8.c
index e21cb4f6b5..7bc2b099e8 100644
--- a/utf8.c
+++ b/utf8.c
@@ -2254,13 +2254,18 @@ Perl_ibcmp_utf8(pTHX_ const char *s1, char **pe1, register UV l1, bool u1, const
if (pe1)
e1 = *(U8**)pe1;
+ /* assert(e1 || l1); */
if (e1 == 0 || (l1 && l1 < (UV)(e1 - (const U8*)s1)))
f1 = (const U8*)s1 + l1;
if (pe2)
e2 = *(U8**)pe2;
+ /* assert(e2 || l2); */
if (e2 == 0 || (l2 && l2 < (UV)(e2 - (const U8*)s2)))
f2 = (const U8*)s2 + l2;
+ /* This shouldn't happen. However, putting an assert() there makes some
+ * tests fail. */
+ /* assert((e1 == 0 && f1 == 0) || (e2 == 0 && f2 == 0) || (f1 == 0 && f2 == 0)); */
if ((e1 == 0 && f1 == 0) || (e2 == 0 && f2 == 0) || (f1 == 0 && f2 == 0))
return 1; /* mismatch; possible infinite loop or false positive */