From: Karl <khw@karl.(none)>
Date: Fri, 26 Dec 2008 17:45:05 +0000 (-0700)
Subject: Fix malformed utf8 in regexec.c
X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=3f0c5693d0a2100faf1b56983c7325096fcb0bda;p=p5sagit%2Fp5-mst-13.2.git

Fix malformed utf8 in regexec.c
---

diff --git a/regexec.c b/regexec.c
index f959121..94d6761 100644
--- a/regexec.c
+++ b/regexec.c
@@ -5771,7 +5771,14 @@ S_reginclass(pTHX_ const regexp *prog, register const regnode *n, register const
 	    SV * const sw = regclass_swash(prog, n, TRUE, 0, (SV**)&av);
 	
 	    if (sw) {
-		if (swash_fetch(sw, p, do_utf8))
+		U8 * utf8_p;
+		if (do_utf8) {
+		    utf8_p = (U8 *) p;
+		} else {
+		    STRLEN len = 1;
+		    utf8_p = bytes_to_utf8(p, &len);
+		}
+		if (swash_fetch(sw, utf8_p, 1))
 		    match = TRUE;
 		else if (flags & ANYOF_FOLD) {
 		    if (!match && lenp && av) {
@@ -5780,8 +5787,7 @@ S_reginclass(pTHX_ const regexp *prog, register const regnode *n, register const
 			    SV* const sv = *av_fetch(av, i, FALSE);
 			    STRLEN len;
 			    const char * const s = SvPV_const(sv, len);
-			
-			    if (len <= plen && memEQ(s, (char*)p, len)) {
+			    if (len <= plen && memEQ(s, (char*)utf8_p, len)) {
 			        *lenp = len;
 				match = TRUE;
 				break;
@@ -5790,10 +5796,10 @@ S_reginclass(pTHX_ const regexp *prog, register const regnode *n, register const
 		    }
 		    if (!match) {
 		        U8 tmpbuf[UTF8_MAXBYTES_CASE+1];
-			STRLEN tmplen;
 
-		        to_utf8_fold(p, tmpbuf, &tmplen);
-			if (swash_fetch(sw, tmpbuf, do_utf8))
+			STRLEN tmplen;
+			to_utf8_fold(utf8_p, tmpbuf, &tmplen);
+			if (swash_fetch(sw, tmpbuf, 1))
 			    match = TRUE;
 		    }
 		}