mirror of
https://github.com/coop-deluxe/sm64coopdx.git
synced 2024-11-28 23:13:02 +00:00
Fix potential mod storage crashes and increase max key/value length to 256
This commit is contained in:
parent
ae58081f54
commit
8939bdba3b
4 changed files with 20 additions and 39 deletions
|
@ -5675,7 +5675,7 @@ MARIO_HAND_RIGHT_OPEN = 5
|
||||||
MAX_KEYS = 512
|
MAX_KEYS = 512
|
||||||
|
|
||||||
--- @type integer
|
--- @type integer
|
||||||
MAX_KEY_VALUE_LENGTH = 64
|
MAX_KEY_VALUE_LENGTH = 256
|
||||||
|
|
||||||
--- @type integer
|
--- @type integer
|
||||||
PACKET_LENGTH = 3000
|
PACKET_LENGTH = 3000
|
||||||
|
|
|
@ -2094,7 +2094,7 @@ char gSmluaConstants[] = ""
|
||||||
"GRAB_POS_HEAVY_OBJ = 2\n"
|
"GRAB_POS_HEAVY_OBJ = 2\n"
|
||||||
"GRAB_POS_BOWSER = 3\n"
|
"GRAB_POS_BOWSER = 3\n"
|
||||||
"MAX_KEYS = 512\n"
|
"MAX_KEYS = 512\n"
|
||||||
"MAX_KEY_VALUE_LENGTH = 64\n"
|
"MAX_KEY_VALUE_LENGTH = 256\n"
|
||||||
"SYNC_DISTANCE_ONLY_DEATH = -1\n"
|
"SYNC_DISTANCE_ONLY_DEATH = -1\n"
|
||||||
"SYNC_DISTANCE_ONLY_EVENTS = -2\n"
|
"SYNC_DISTANCE_ONLY_EVENTS = -2\n"
|
||||||
"SYNC_DISTANCE_INFINITE = 0\n"
|
"SYNC_DISTANCE_INFINITE = 0\n"
|
||||||
|
|
|
@ -64,30 +64,23 @@ void mod_storage_get_filename(char* dest) {
|
||||||
}
|
}
|
||||||
|
|
||||||
C_FIELD bool mod_storage_save(const char* key, const char* value) {
|
C_FIELD bool mod_storage_save(const char* key, const char* value) {
|
||||||
if (strlen(key) > MAX_KEY_VALUE_LENGTH || strlen(value) > MAX_KEY_VALUE_LENGTH) {
|
if (gLuaActiveMod == NULL) { return false; }
|
||||||
return false;
|
if (strlen(key) > MAX_KEY_VALUE_LENGTH || strlen(value) > MAX_KEY_VALUE_LENGTH) { return false; }
|
||||||
}
|
if (!char_valid((char *)key) || !char_valid((char *)value)) { return false; }
|
||||||
if (!char_valid((char *)key) || !char_valid((char *)value)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
char filename[SYS_MAX_PATH] = {0};
|
char filename[SYS_MAX_PATH] = {0};
|
||||||
mod_storage_get_filename(filename);
|
mod_storage_get_filename(filename);
|
||||||
|
|
||||||
// ensure savPath exists
|
// ensure savPath exists
|
||||||
char savPath[SYS_MAX_PATH] = { 0 };
|
char savPath[SYS_MAX_PATH] = { 0 };
|
||||||
if (snprintf(savPath, SYS_MAX_PATH - 1, "%s", fs_get_write_path(SAVE_DIRECTORY)) < 0) {
|
if (snprintf(savPath, SYS_MAX_PATH - 1, "%s", fs_get_write_path(SAVE_DIRECTORY)) < 0) { return false; }
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if (!fs_sys_dir_exists(savPath)) { fs_sys_mkdir(savPath); }
|
if (!fs_sys_dir_exists(savPath)) { fs_sys_mkdir(savPath); }
|
||||||
|
|
||||||
mINI::INIFile file(filename);
|
mINI::INIFile file(filename);
|
||||||
mINI::INIStructure ini;
|
mINI::INIStructure ini;
|
||||||
file.read(ini);
|
file.read(ini);
|
||||||
|
|
||||||
if (ini["storage"].size() + 1 > MAX_KEYS) {
|
if (ini["storage"].size() + 1 > MAX_KEYS) { return false; }
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
ini["storage"][key] = value;
|
ini["storage"][key] = value;
|
||||||
|
|
||||||
|
@ -106,19 +99,14 @@ C_FIELD bool mod_storage_save_bool(const char* key, bool value) {
|
||||||
}
|
}
|
||||||
|
|
||||||
C_FIELD const char* mod_storage_load(const char* key) {
|
C_FIELD const char* mod_storage_load(const char* key) {
|
||||||
if (strlen(key) > MAX_KEY_VALUE_LENGTH) {
|
if (gLuaActiveMod == NULL) { return NULL; }
|
||||||
return NULL;
|
if (strlen(key) > MAX_KEY_VALUE_LENGTH) { return NULL; }
|
||||||
}
|
if (!char_valid((char *)key)) { return NULL; }
|
||||||
if (!char_valid((char *)key)) {
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
char filename[SYS_MAX_PATH] = {0};
|
char filename[SYS_MAX_PATH] = {0};
|
||||||
mod_storage_get_filename(filename);
|
mod_storage_get_filename(filename);
|
||||||
|
|
||||||
if (!path_exists(filename)) {
|
if (!path_exists(filename)) { return NULL; }
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
mINI::INIFile file(filename);
|
mINI::INIFile file(filename);
|
||||||
mINI::INIStructure ini;
|
mINI::INIStructure ini;
|
||||||
|
@ -142,19 +130,14 @@ C_FIELD bool mod_storage_load_bool(const char* key) {
|
||||||
}
|
}
|
||||||
|
|
||||||
C_FIELD bool mod_storage_remove(const char* key) {
|
C_FIELD bool mod_storage_remove(const char* key) {
|
||||||
if (strlen(key) > MAX_KEY_VALUE_LENGTH) {
|
if (gLuaActiveMod == NULL) { return false; }
|
||||||
return false;
|
if (strlen(key) > MAX_KEY_VALUE_LENGTH) { return false; }
|
||||||
}
|
if (!char_valid((char *)key)) { return false; }
|
||||||
if (!char_valid((char *)key)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
char filename[SYS_MAX_PATH] = {0};
|
char filename[SYS_MAX_PATH] = {0};
|
||||||
mod_storage_get_filename(filename);
|
mod_storage_get_filename(filename);
|
||||||
|
|
||||||
if (!path_exists(filename)) {
|
if (!path_exists(filename)) { return false; }
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
mINI::INIFile file(filename);
|
mINI::INIFile file(filename);
|
||||||
mINI::INIStructure ini;
|
mINI::INIStructure ini;
|
||||||
|
@ -170,20 +153,18 @@ C_FIELD bool mod_storage_remove(const char* key) {
|
||||||
}
|
}
|
||||||
|
|
||||||
C_FIELD bool mod_storage_clear(void) {
|
C_FIELD bool mod_storage_clear(void) {
|
||||||
|
if (gLuaActiveMod == NULL) { return false; }
|
||||||
|
|
||||||
char filename[SYS_MAX_PATH] = {0};
|
char filename[SYS_MAX_PATH] = {0};
|
||||||
mod_storage_get_filename(filename);
|
mod_storage_get_filename(filename);
|
||||||
|
|
||||||
if (!path_exists(filename)) {
|
if (!path_exists(filename)) { return false; }
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
mINI::INIFile file(filename);
|
mINI::INIFile file(filename);
|
||||||
mINI::INIStructure ini;
|
mINI::INIStructure ini;
|
||||||
file.read(ini);
|
file.read(ini);
|
||||||
|
|
||||||
if (ini["storage"].size() == 0) {
|
if (ini["storage"].size() == 0) { return false; }
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
ini["storage"].clear();
|
ini["storage"].clear();
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@ extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define MAX_KEYS 512
|
#define MAX_KEYS 512
|
||||||
#define MAX_KEY_VALUE_LENGTH 64
|
#define MAX_KEY_VALUE_LENGTH 256
|
||||||
#define SAVE_DIRECTORY "sav"
|
#define SAVE_DIRECTORY "sav"
|
||||||
#define SAVE_EXTENSION ".sav"
|
#define SAVE_EXTENSION ".sav"
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue