< 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 >