Bump ini output buffer size and add checks

This commit is contained in:
TuxSH 2026-01-19 18:26:59 +01:00
parent a608ad8241
commit 7f1dd962af
3 changed files with 16 additions and 2 deletions

View File

@ -694,7 +694,7 @@ static size_t saveLumaIniConfigToStr(char *out)
return n < 0 ? 0 : (size_t)n;
}
static char tmpIniBuffer[0x2000];
static char tmpIniBuffer[0x2000 + 0x400]; // eyeballed. TODO use #embed
static bool readLumaIniConfig(void)
{
@ -709,6 +709,13 @@ static bool readLumaIniConfig(void)
static bool writeLumaIniConfig(void)
{
size_t n = saveLumaIniConfigToStr(tmpIniBuffer);
// FIXME: this is UB we should port snprintf sometime (as well as fix other tech debt)
if (n + 1 >= sizeof(tmpIniBuffer)) {
error("Configuration data buffer overflow, please report this issue");
__builtin_unreachable();
}
return n != 0 && fileWrite(tmpIniBuffer, "config.ini", n);
}

View File

@ -30,6 +30,7 @@
#include <3ds/srv.h>
#include <3ds/result.h>
#include <3ds/ipc.h>
#include <assert.h>
#include "csvc.h"
#include "luma_shared_config.h"

View File

@ -204,7 +204,7 @@ void LumaConfig_RequestSaveSettings(void) {
Result LumaConfig_SaveSettings(void)
{
char inibuf[0x2000];
char inibuf[0x2000 + 0x400]; // eyeballed. TODO use #embed
Result res;
@ -259,6 +259,12 @@ Result LumaConfig_SaveSettings(void)
configData.autobootCtrAppmemtype = autobootCtrAppmemtype;
size_t n = LumaConfig_SaveLumaIniConfigToStr(inibuf, &configData);
// FIXME: this is UB we should port snprintf sometime (as well as fix other tech debt in Rosalina)
if (n + 1 >= sizeof(inibuf)) {
__builtin_trap();
}
FS_ArchiveID archiveId = isSdMode ? ARCHIVE_SDMC : ARCHIVE_NAND_RW;
if (n > 0)
res = IFile_Open(&file, archiveId, fsMakePath(PATH_EMPTY, ""), fsMakePath(PATH_ASCII, "/luma/config.ini"), FS_OPEN_CREATE | FS_OPEN_WRITE);