From ca9fab4684db1c2d435d11b9339f25cf4a8d3fba Mon Sep 17 00:00:00 2001 From: Karl Williamson Date: Mon, 12 Nov 2012 16:43:12 -0700 Subject: [PATCH] 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. --- utf8.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) 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; -- 2.7.4