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;
|
return n < 0 ? 0 : (size_t)n;
|
||||||
}
|
}
|
||||||
|
|
||||||
static char tmpIniBuffer[0x2000];
|
static char tmpIniBuffer[0x2000 + 0x400]; // eyeballed. TODO use #embed
|
||||||
|
|
||||||
static bool readLumaIniConfig(void)
|
static bool readLumaIniConfig(void)
|
||||||
{
|
{
|
||||||
@ -709,6 +709,13 @@ static bool readLumaIniConfig(void)
|
|||||||
static bool writeLumaIniConfig(void)
|
static bool writeLumaIniConfig(void)
|
||||||
{
|
{
|
||||||
size_t n = saveLumaIniConfigToStr(tmpIniBuffer);
|
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);
|
return n != 0 && fileWrite(tmpIniBuffer, "config.ini", n);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -30,6 +30,7 @@
|
|||||||
#include <3ds/srv.h>
|
#include <3ds/srv.h>
|
||||||
#include <3ds/result.h>
|
#include <3ds/result.h>
|
||||||
#include <3ds/ipc.h>
|
#include <3ds/ipc.h>
|
||||||
|
#include <assert.h>
|
||||||
#include "csvc.h"
|
#include "csvc.h"
|
||||||
#include "luma_shared_config.h"
|
#include "luma_shared_config.h"
|
||||||
|
|
||||||
|
|||||||
@ -204,7 +204,7 @@ void LumaConfig_RequestSaveSettings(void) {
|
|||||||
|
|
||||||
Result LumaConfig_SaveSettings(void)
|
Result LumaConfig_SaveSettings(void)
|
||||||
{
|
{
|
||||||
char inibuf[0x2000];
|
char inibuf[0x2000 + 0x400]; // eyeballed. TODO use #embed
|
||||||
|
|
||||||
Result res;
|
Result res;
|
||||||
|
|
||||||
@ -259,6 +259,12 @@ Result LumaConfig_SaveSettings(void)
|
|||||||
configData.autobootCtrAppmemtype = autobootCtrAppmemtype;
|
configData.autobootCtrAppmemtype = autobootCtrAppmemtype;
|
||||||
|
|
||||||
size_t n = LumaConfig_SaveLumaIniConfigToStr(inibuf, &configData);
|
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;
|
FS_ArchiveID archiveId = isSdMode ? ARCHIVE_SDMC : ARCHIVE_NAND_RW;
|
||||||
if (n > 0)
|
if (n > 0)
|
||||||
res = IFile_Open(&file, archiveId, fsMakePath(PATH_EMPTY, ""), fsMakePath(PATH_ASCII, "/luma/config.ini"), FS_OPEN_CREATE | FS_OPEN_WRITE);
|
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