mirror of
https://github.com/Lime3DS/Lime3DS
synced 2024-12-28 10:02:31 -06:00
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:
parent
327ad8bcce
commit
e2c5666883
2 changed files with 11 additions and 5 deletions
|
@ -456,6 +456,8 @@ void Module::ScanForTitles(Service::FS::MediaType media_type) {
|
||||||
for (const FileUtil::FSTEntry& tid_high : entries.children) {
|
for (const FileUtil::FSTEntry& tid_high : entries.children) {
|
||||||
for (const FileUtil::FSTEntry& tid_low : tid_high.children) {
|
for (const FileUtil::FSTEntry& tid_low : tid_high.children) {
|
||||||
std::string tid_string = tid_high.virtualName + tid_low.virtualName;
|
std::string tid_string = tid_high.virtualName + tid_low.virtualName;
|
||||||
|
|
||||||
|
if (tid_string.length() == TITLE_ID_VALID_LENGTH) {
|
||||||
u64 tid = std::stoull(tid_string.c_str(), nullptr, 16);
|
u64 tid = std::stoull(tid_string.c_str(), nullptr, 16);
|
||||||
|
|
||||||
FileSys::NCCHContainer container(GetTitleContentPath(media_type, tid));
|
FileSys::NCCHContainer container(GetTitleContentPath(media_type, tid));
|
||||||
|
@ -464,6 +466,7 @@ void Module::ScanForTitles(Service::FS::MediaType media_type) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void Module::ScanForAllTitles() {
|
void Module::ScanForAllTitles() {
|
||||||
ScanForTitles(Service::FS::MediaType::NAND);
|
ScanForTitles(Service::FS::MediaType::NAND);
|
||||||
|
|
|
@ -52,7 +52,10 @@ enum class InstallStatus : u32 {
|
||||||
ErrorEncrypted,
|
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);
|
using ProgressCallback = void(size_t, size_t);
|
||||||
|
|
||||||
// A file handled returned for CIAs to be written into and subsequently installed.
|
// A file handled returned for CIAs to be written into and subsequently installed.
|
||||||
|
|
Loading…
Reference in a new issue