mirror of
https://github.com/LumaTeam/Luma3DS.git
synced 2026-02-22 01:44:38 +00:00
Bump ini output buffer size and add checks
This commit is contained in:
parent
a608ad8241
commit
7f1dd962af
@ -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);
|
||||
}
|
||||
|
||||
|
||||
@ -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"
|
||||
|
||||
|
||||
@ -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);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user