Fix strncpy bugs in fusée, etc.

This commit is contained in:
TuxSH 2018-05-15 01:18:05 +02:00
parent cae107557d
commit 172a2b679c
6 changed files with 8 additions and 6 deletions

View file

@ -555,7 +555,7 @@ static void console_scrollup (void)
CONFIG_VIDEO_VISIBLE_ROWS - video_logo_height - VIDEO_FONT_HEIGHT /* frame height */ CONFIG_VIDEO_VISIBLE_ROWS - video_logo_height - VIDEO_FONT_HEIGHT /* frame height */
); );
#else #else
memcpy(CONSOLE_ROW_FIRST, CONSOLE_ROW_SECOND, memmove(CONSOLE_ROW_FIRST, CONSOLE_ROW_SECOND,
CONSOLE_SCROLL_SIZE); CONSOLE_SCROLL_SIZE);
#endif #endif

View file

@ -70,7 +70,7 @@ static char* find_chars_or_comment(const char* s, const char* chars)
/* Version of strncpy that ensures dest (size bytes) is null-terminated. */ /* Version of strncpy that ensures dest (size bytes) is null-terminated. */
static char* strncpy0(char* dest, const char* src, size_t size) static char* strncpy0(char* dest, const char* src, size_t size)
{ {
strncpy(dest, src, size); strncpy(dest, src, size - 1);
dest[size - 1] = '\0'; dest[size - 1] = '\0';
return dest; return dest;
} }

View file

@ -20,7 +20,8 @@ static int stage2_ini_handler(void *user, const char *section, const char *name,
uintptr_t x = 0; uintptr_t x = 0;
if (strcmp(section, "stage1") == 0) { if (strcmp(section, "stage1") == 0) {
if (strcmp(name, STAGE2_NAME_KEY) == 0) { if (strcmp(name, STAGE2_NAME_KEY) == 0) {
strncpy(config->path, value, sizeof(config->path)); strncpy(config->path, value, sizeof(config->path) - 1);
config->path[sizeof(config->path) - 1] = '\0';
} else if (strcmp(name, STAGE2_ADDRESS_KEY) == 0) { } else if (strcmp(name, STAGE2_ADDRESS_KEY) == 0) {
/* Read in load address as a hex string. */ /* Read in load address as a hex string. */
sscanf(value, "%x", &x); sscanf(value, "%x", &x);

View file

@ -555,7 +555,7 @@ static void console_scrollup (void)
CONFIG_VIDEO_VISIBLE_ROWS - video_logo_height - VIDEO_FONT_HEIGHT /* frame height */ CONFIG_VIDEO_VISIBLE_ROWS - video_logo_height - VIDEO_FONT_HEIGHT /* frame height */
); );
#else #else
memcpy(CONSOLE_ROW_FIRST, CONSOLE_ROW_SECOND, memmove(CONSOLE_ROW_FIRST, CONSOLE_ROW_SECOND,
CONSOLE_SCROLL_SIZE); CONSOLE_SCROLL_SIZE);
#endif #endif

View file

@ -70,7 +70,7 @@ static char* find_chars_or_comment(const char* s, const char* chars)
/* Version of strncpy that ensures dest (size bytes) is null-terminated. */ /* Version of strncpy that ensures dest (size bytes) is null-terminated. */
static char* strncpy0(char* dest, const char* src, size_t size) static char* strncpy0(char* dest, const char* src, size_t size)
{ {
strncpy(dest, src, size); strncpy(dest, src, size - 1);
dest[size - 1] = '\0'; dest[size - 1] = '\0';
return dest; return dest;
} }

View file

@ -25,7 +25,8 @@ static int loadlist_entry_ini_handler(void *user, const char *section, const cha
ext = name + strlen(load_file_ctx->key); ext = name + strlen(load_file_ctx->key);
if (strcmp(ext, "_path") == 0) { if (strcmp(ext, "_path") == 0) {
/* Copy in the path. */ /* Copy in the path. */
strncpy(load_file_ctx->path, value, sizeof(load_file_ctx->path)); strncpy(load_file_ctx->path, value, sizeof(load_file_ctx->path) - 1);
load_file_ctx->path[sizeof(load_file_ctx->path) - 1] = '\0';
} else if (strcmp(ext, "_addr") == 0) { } else if (strcmp(ext, "_addr") == 0) {
/* Read in load address as a hex string. */ /* Read in load address as a hex string. */
sscanf(value, "%x", &x); sscanf(value, "%x", &x);