From: Karl Williamson Date: Mon, 12 Nov 2012 23:43:12 +0000 (-0700) Subject: utf8.c: Don't copy a buffer to itself X-Git-Tag: upstream/5.20.0~4821 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=ca9fab4684db1c2d435d11b9339f25cf4a8d3fba;p=platform%2Fupstream%2Fperl.git utf8.c: Don't copy a buffer to itself memcpy(), which is what Copy() resolves to, is not supposed to handle the possibility of overlapping source and destination. In some cases in this code, the source and destination pointers are identical. What should happen then is a no-op, so just don't do the copy in that case. If the ptrs aren't identical, they won't otherwise overlap, so the Copy() is valid except for when they are identical. --- diff --git a/utf8.c b/utf8.c index 3ee9f2d..322bc46 100644 --- a/utf8.c +++ b/utf8.c @@ -2366,7 +2366,9 @@ Perl_to_utf8_case(pTHX_ const U8 *p, U8* ustrp, STRLEN *lenp, /* Here, there was no mapping defined, which means that the code point maps * to itself. Return the inputs */ len = UTF8SKIP(p); - Copy(p, ustrp, len, U8); + if (p != ustrp) { /* Don't copy onto itself */ + Copy(p, ustrp, len, U8); + } if (lenp) *lenp = len;