Merge pull request #718 from lioncash/read

loader/nso: Check if read succeeded in IdentifyFile() before checking magic value
master
bunnei 2018-07-19 16:10:29 +07:00 committed by GitHub
commit dd0446ff43
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 7 additions and 5 deletions

@ -55,15 +55,17 @@ AppLoader_NSO::AppLoader_NSO(FileSys::VirtualFile file) : AppLoader(std::move(fi
FileType AppLoader_NSO::IdentifyType(const FileSys::VirtualFile& file) { FileType AppLoader_NSO::IdentifyType(const FileSys::VirtualFile& file) {
u32 magic = 0; u32 magic = 0;
file->ReadObject(&magic); if (file->ReadObject(&magic) != sizeof(magic)) {
return FileType::Error;
if (Common::MakeMagic('N', 'S', 'O', '0') == magic) {
return FileType::NSO;
} }
if (Common::MakeMagic('N', 'S', 'O', '0') != magic) {
return FileType::Error; return FileType::Error;
} }
return FileType::NSO;
}
static std::vector<u8> DecompressSegment(const std::vector<u8>& compressed_data, static std::vector<u8> DecompressSegment(const std::vector<u8>& compressed_data,
const NsoSegmentHeader& header) { const NsoSegmentHeader& header) {
std::vector<u8> uncompressed_data(header.size); std::vector<u8> uncompressed_data(header.size);