From 77ed3d47331e4abcbee751aaa038185985acfc5f Mon Sep 17 00:00:00 2001 From: d0k3 Date: Fri, 8 Sep 2017 20:58:20 +0200 Subject: [PATCH] Scripting: improved write permission checks --- source/utils/gameutil.c | 2 ++ source/utils/scripting.c | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/source/utils/gameutil.c b/source/utils/gameutil.c index c9e4c9f..4763270 100644 --- a/source/utils/gameutil.c +++ b/source/utils/gameutil.c @@ -1386,6 +1386,7 @@ u32 DumpCxiSrlFromTmdFile(const char* path) { // prepare output name snprintf(dest, 256, OUTPUT_PATH "/"); char* dname = dest + strnlen(dest, 256); + if (!CheckWritePermissions(dest)) return 1; // ensure the output dir exists if (fvx_rmkdir(OUTPUT_PATH) != FR_OK) @@ -1426,6 +1427,7 @@ u32 ExtractCodeFromCxiFile(const char* path, const char* path_out) { if (fvx_rmkdir(OUTPUT_PATH) != FR_OK) return 1; snprintf(dest, 256, OUTPUT_PATH "/%016llX%s%s", ncch.programId, (exthdr.flag & 0x1) ? ".dec" : "", EXEFS_CODE_NAME); } else strncpy(dest, path_out, 256); + if (!CheckWritePermissions(dest)) return 1; // write output file fvx_unlink(dest); diff --git a/source/utils/scripting.c b/source/utils/scripting.c index e3f47d2..bf8dbd0 100644 --- a/source/utils/scripting.c +++ b/source/utils/scripting.c @@ -527,7 +527,7 @@ bool run_cmd(cmd_id id, u32 flags, char** argv, char* err_str) { ret = PathDelete(argv[0]); if (err_str) snprintf(err_str, _ERR_STR_LEN, "remove fail"); } else if (id == CMD_ID_MKDIR) { - ret = (fvx_rmkdir(argv[0]) == FR_OK); + ret = (CheckWritePermissions(argv[0])) && (fvx_rmkdir(argv[0]) == FR_OK); if (err_str) snprintf(err_str, _ERR_STR_LEN, "makedir fail"); } else if (id == CMD_ID_MOUNT) { ret = InitImgFS(argv[0]);