mirror of
https://github.com/OpenRCT2/OpenRCT2
synced 2026-01-17 20:13:07 +01:00
Fixes to safe_strncpy
* don't touch memory at all if size passed is 0 * use original address instead of now-changed `destination` * fix one of the calls having improper size passed
This commit is contained in:
@@ -188,7 +188,7 @@ void console_draw(rct_drawpixelinfo *dpi)
|
||||
int lineLength = min(sizeof(lineBuffer) - (size_t)utf8_get_codepoint_length(FORMAT_GREEN), (size_t)(nextLine - ch));
|
||||
lineCh = lineBuffer;
|
||||
lineCh = utf8_write_codepoint(lineCh, FORMAT_GREEN);
|
||||
safe_strncpy(lineCh, ch, lineLength);
|
||||
safe_strncpy(lineCh, ch, CONSOLE_BUFFER_SIZE);
|
||||
lineCh[lineLength] = 0;
|
||||
|
||||
gfx_draw_string(dpi, lineBuffer, 255, x, y);
|
||||
|
||||
@@ -183,6 +183,10 @@ int strcicmp(char const *a, char const *b)
|
||||
|
||||
char *safe_strncpy(char * destination, const char * source, size_t size)
|
||||
{
|
||||
if (size == 0)
|
||||
{
|
||||
return destination;
|
||||
}
|
||||
char *result = destination;
|
||||
bool terminated = false;
|
||||
for (size_t i = 0; i < size; i++)
|
||||
@@ -198,7 +202,7 @@ char *safe_strncpy(char * destination, const char * source, size_t size)
|
||||
}
|
||||
if (!terminated)
|
||||
{
|
||||
destination[size - 1] = '\0';
|
||||
result[size - 1] = '\0';
|
||||
log_warning("Truncating string %s to %d bytes.", destination, size);
|
||||
}
|
||||
return result;
|
||||
|
||||
Reference in New Issue
Block a user