< prev index next >

src/share/vm/utilities/ostream.cpp

Print this page
rev 8113 : 8076475: Misuses of strncpy/strncat
Summary: Various small fixes around strncpy and strncat
Reviewed-by: dsamersoff

*** 107,117 **** buffer[result_len] = 0; } } if (add_cr) { if (result != buffer) { ! strncpy(buffer, result, buflen); result = buffer; } buffer[result_len++] = '\n'; buffer[result_len] = 0; } --- 107,117 ---- buffer[result_len] = 0; } } if (add_cr) { if (result != buffer) { ! memcpy(buffer, result, result_len); result = buffer; } buffer[result_len++] = '\n'; buffer[result_len] = 0; }
*** 332,350 **** } char* oldbuf = buffer; assert(rm == NULL || Thread::current()->current_resource_mark() == rm, "stringStream is re-allocated with a different ResourceMark"); buffer = NEW_RESOURCE_ARRAY(char, end); ! strncpy(buffer, oldbuf, buffer_pos); buffer_length = end; } } // invariant: buffer is always null-terminated guarantee(buffer_pos + write_len + 1 <= buffer_length, "stringStream oob"); buffer[buffer_pos + write_len] = 0; ! strncpy(buffer + buffer_pos, s, write_len); buffer_pos += write_len; // Note that the following does not depend on write_len. // This means that position and count get updated // even when overflow occurs. update_position(s, len); --- 332,354 ---- } char* oldbuf = buffer; assert(rm == NULL || Thread::current()->current_resource_mark() == rm, "stringStream is re-allocated with a different ResourceMark"); buffer = NEW_RESOURCE_ARRAY(char, end); ! if (buffer_pos > 0) { ! memcpy(buffer, oldbuf, buffer_pos); ! } buffer_length = end; } } // invariant: buffer is always null-terminated guarantee(buffer_pos + write_len + 1 <= buffer_length, "stringStream oob"); + if (write_len > 0) { buffer[buffer_pos + write_len] = 0; ! memcpy(buffer + buffer_pos, s, write_len); buffer_pos += write_len; + } // Note that the following does not depend on write_len. // This means that position and count get updated // even when overflow occurs. update_position(s, len);
< prev index next >