From 992dd643dccaa20268c019b97550a3cc5ab471d6 Mon Sep 17 00:00:00 2001 From: WerWolv Date: Sat, 8 Jun 2019 13:16:38 +0200 Subject: [PATCH] Truncate cheat names when they get too long instead of not parsing the cheat at all --- stratosphere/dmnt/source/dmnt_cheat_manager.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/stratosphere/dmnt/source/dmnt_cheat_manager.cpp b/stratosphere/dmnt/source/dmnt_cheat_manager.cpp index 14077a702..79cd42d81 100644 --- a/stratosphere/dmnt/source/dmnt_cheat_manager.cpp +++ b/stratosphere/dmnt/source/dmnt_cheat_manager.cpp @@ -321,13 +321,14 @@ bool DmntCheatManager::ParseCheats(const char *s, size_t len) { size_t j = i + 1; while (s[j] != ']') { j++; - if (j >= len || (j - i - 1) >= sizeof(cur_entry->definition.readable_name)) { + if (j >= len) { return false; } } /* s[i+1:j] is cheat name. */ - const size_t cheat_name_len = (j - i - 1); + /* Truncate the cheat name if it's too long */ + const size_t cheat_name_len = std::min(j - i - 1, sizeof(cur_entry->definition.readable_name)); memcpy(cur_entry->definition.readable_name, &s[i+1], cheat_name_len); cur_entry->definition.readable_name[cheat_name_len] = 0; @@ -346,13 +347,14 @@ bool DmntCheatManager::ParseCheats(const char *s, size_t len) { size_t j = i + 1; while (s[j] != '}') { j++; - if (j >= len || (j - i - 1) >= sizeof(cur_entry->definition.readable_name)) { + if (j >= len) { return false; } } /* s[i+1:j] is cheat name. */ - const size_t cheat_name_len = (j - i - 1); + /* Truncate the master cheat name if it's too long */ + const size_t cheat_name_len = std::min(j - i - 1, sizeof(cur_entry->definition.readable_name)); memcpy(cur_entry->definition.readable_name, &s[i+1], cheat_name_len); cur_entry->definition.readable_name[cheat_name_len] = 0;