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