From fe384040e9c8ce97ba5836d9874af8d8b1056d85 Mon Sep 17 00:00:00 2001 From: Daniel Svensson Date: Mon, 29 Jul 2024 19:29:54 +0200 Subject: [PATCH] Fix invalid strlcpy invocation. Henceforth guarded via -Werror=strlcpy-strlcat-size where supported. --- CMakeLists.txt | 5 +++++ src/race.c | 6 +++--- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 137ea1a6..25cbf1dc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -160,6 +160,11 @@ else() target_compile_options(${PROJECT_NAME} PRIVATE -Werror=strict-prototypes) endif() + check_c_compiler_flag("-Wstrlcpy-strlcat-size" HAS_STRLCPY_STRLCAT_SIZE) + if (HAS_STRLCPY_STRLCAT_SIZE) + target_compile_options(${PROJECT_NAME} PRIVATE -Werror=strlcpy-strlcat-size) + endif() + # Do not allow undefined symbols while linking. if(APPLE) target_link_options(${PROJECT_NAME} PRIVATE "-Wl,-undefined,error") diff --git a/src/race.c b/src/race.c index f415a1db..f9dddc65 100644 --- a/src/race.c +++ b/src/race.c @@ -3584,9 +3584,9 @@ void read_topscores(void) race_fgets(line, MAX_TXTLEN); race.records[cnt].time = atof(line); race_fgets(line, MAX_TXTLEN); - strlcpy(race.records[cnt].racername, line, strlen(line)); + strlcpy(race.records[cnt].racername, line, sizeof(race.records[cnt].racername)); race_fgets(line, MAX_TXTLEN); - strlcpy(race.records[cnt].demoname, line, strlen(line)); + strlcpy(race.records[cnt].demoname, line, sizeof(race.records[cnt].demoname)); race_fgets(line, MAX_TXTLEN); race.records[cnt].distance = atof(line); race_fgets(line, MAX_TXTLEN); @@ -3594,7 +3594,7 @@ void read_topscores(void) race_fgets(line, MAX_TXTLEN); race.records[cnt].avgspeed = atof(line); race_fgets(line, MAX_TXTLEN); - strlcpy(race.records[cnt].date, line, strlen(line)); + strlcpy(race.records[cnt].date, line, sizeof(race.records[cnt].date)); race_fgets(line, MAX_TXTLEN); race.records[cnt].weaponmode = atoi(line); race_fgets(line, MAX_TXTLEN);