1.1 --- a/src/share/vm/utilities/ostream.cpp Mon Sep 23 20:26:18 2019 +0200 1.2 +++ b/src/share/vm/utilities/ostream.cpp Fri Apr 03 14:14:26 2020 +0100 1.3 @@ -344,15 +344,19 @@ 1.4 assert(rm == NULL || Thread::current()->current_resource_mark() == rm, 1.5 "stringStream is re-allocated with a different ResourceMark"); 1.6 buffer = NEW_RESOURCE_ARRAY(char, end); 1.7 - strncpy(buffer, oldbuf, buffer_pos); 1.8 + if (buffer_pos > 0) { 1.9 + memcpy(buffer, oldbuf, buffer_pos); 1.10 + } 1.11 buffer_length = end; 1.12 } 1.13 } 1.14 // invariant: buffer is always null-terminated 1.15 guarantee(buffer_pos + write_len + 1 <= buffer_length, "stringStream oob"); 1.16 - buffer[buffer_pos + write_len] = 0; 1.17 - strncpy(buffer + buffer_pos, s, write_len); 1.18 - buffer_pos += write_len; 1.19 + if (write_len > 0) { 1.20 + buffer[buffer_pos + write_len] = 0; 1.21 + memcpy(buffer + buffer_pos, s, write_len); 1.22 + buffer_pos += write_len; 1.23 + } 1.24 1.25 // Note that the following does not depend on write_len. 1.26 // This means that position and count get updated