Service/AM: Fix crash when scanning titles with installed titles with invalid title IDs (#3542)

* Service/AM: Fix crash when scanning titles with installed titles with invalid title IDs

Fixes #3332
This commit is contained in:
Valentin Vanelslande 2018-03-24 13:06:50 -06:00 committed by James Rowe
parent 327ad8bcce
commit e2c5666883
2 changed files with 11 additions and 5 deletions

View file

@ -456,11 +456,14 @@ void Module::ScanForTitles(Service::FS::MediaType media_type) {
for (const FileUtil::FSTEntry& tid_high : entries.children) {
for (const FileUtil::FSTEntry& tid_low : tid_high.children) {
std::string tid_string = tid_high.virtualName + tid_low.virtualName;
u64 tid = std::stoull(tid_string.c_str(), nullptr, 16);
FileSys::NCCHContainer container(GetTitleContentPath(media_type, tid));
if (container.Load() == Loader::ResultStatus::Success)
am_title_list[static_cast<u32>(media_type)].push_back(tid);
if (tid_string.length() == TITLE_ID_VALID_LENGTH) {
u64 tid = std::stoull(tid_string.c_str(), nullptr, 16);
FileSys::NCCHContainer container(GetTitleContentPath(media_type, tid));
if (container.Load() == Loader::ResultStatus::Success)
am_title_list[static_cast<u32>(media_type)].push_back(tid);
}
}
}
}

View file

@ -52,7 +52,10 @@ enum class InstallStatus : u32 {
ErrorEncrypted,
};
// Progress callback for InstallCIA, recieves bytes written and total bytes
// Title ID valid length
constexpr size_t TITLE_ID_VALID_LENGTH = 16;
// Progress callback for InstallCIA, receives bytes written and total bytes
using ProgressCallback = void(size_t, size_t);
// A file handled returned for CIAs to be written into and subsequently installed.