From 714ba439a2a5271a913fede2596c072cb2564516 Mon Sep 17 00:00:00 2001 From: dkf Date: Fri, 2 Mar 2012 10:05:57 +0000 Subject: (Tcl_SetByteArrayObj): Only zero out the memory block if it is not being immediately overwritten. Thanks to Stuart Cassoff for spotting. --- ChangeLog | 8 +++++++- generic/tclBinary.c | 9 ++++++--- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index b180bcd..987a251 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,6 +1,12 @@ +2012-03-02 Donal K. Fellows + + * generic/tclBinary.c (Tcl_SetByteArrayObj): Only zero out the memory + block if it is not being immediately overwritten. (Caller might still + overwrite, but we should at least avoid known-useless work.) + 2012-02-29 Jan Nijtmans - * generic/tclIOUtil.c: [Bug 3466099] BOM in Unicode + * generic/tclIOUtil.c: [Bug 3466099]: BOM in Unicode * generic/tclEncoding.c: * tests/source.test diff --git a/generic/tclBinary.c b/generic/tclBinary.c index 0a340f2..444e7fa 100644 --- a/generic/tclBinary.c +++ b/generic/tclBinary.c @@ -305,11 +305,14 @@ Tcl_SetByteArrayObj( length = (length < 0) ? 0 : length; byteArrayPtr = ckalloc(BYTEARRAY_SIZE(length)); - memset(byteArrayPtr, 0, BYTEARRAY_SIZE(length)); byteArrayPtr->used = length; byteArrayPtr->allocated = length; - if (bytes && length) { - memcpy(byteArrayPtr->bytes, bytes, (size_t) length); + if (length) { + if (bytes) { + memcpy(byteArrayPtr->bytes, bytes, (size_t) length); + } else { + memset(byteArrayPtr->bytes, 0, (size_t) length); + } } objPtr->typePtr = &tclByteArrayType; -- cgit v0.12