From e5abddde571f65f3532f2bc93a23c58944123de6 Mon Sep 17 00:00:00 2001
From: Arne Goedeke <el@laramies.com>
Date: Mon, 17 Jun 2013 14:48:30 +0200
Subject: [PATCH] F_ADD_LOCALS_AND_POP: fixed add when both strings are
 identical

---
 src/interpret_functions.h | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/src/interpret_functions.h b/src/interpret_functions.h
index 4e95b499a9..da057375cd 100644
--- a/src/interpret_functions.h
+++ b/src/interpret_functions.h
@@ -527,9 +527,15 @@ OPCODE2(F_ADD_LOCALS_AND_POP, "local += local", 0,
       if( dsts->len && srcs->len )
       {
           size_t tmp = dsts->len;
+          size_t tmp2 = srcs->len;
+          /*
+           * in case srcs==dsts
+           *  pike_string_cpy(MKPCHARP_STR_OFF(dsts,tmp), srcs);
+           * does bad stuff
+           */
           dsts = new_realloc_shared_string( dsts, tmp+srcs->len, MAX(srcs->size_shift,dsts->size_shift) );
           update_flags_for_add( dsts, srcs );
-          pike_string_cpy(MKPCHARP_STR_OFF(dsts,tmp), srcs);
+          generic_memcpy(MKPCHARP_STR_OFF(dsts,tmp), MKPCHARP_STR(srcs), tmp2);
           dst->u.string = low_end_shared_string( dsts );
       }
       else if( !dsts->len )
-- 
GitLab