summaryrefslogtreecommitdiff
path: root/src/core/loader/nso.cpp
diff options
context:
space:
mode:
authorGravatar Lioncash2018-07-19 12:40:06 -0400
committerGravatar Lioncash2018-07-19 12:43:21 -0400
commit9b22f856c2f644af721568a6f6b23bd66e7beb93 (patch)
tree841c4a2ad026152dcf1571f3bab77860567da796 /src/core/loader/nso.cpp
parentMerge pull request #699 from lioncash/vfs (diff)
downloadyuzu-9b22f856c2f644af721568a6f6b23bd66e7beb93.tar.gz
yuzu-9b22f856c2f644af721568a6f6b23bd66e7beb93.tar.xz
yuzu-9b22f856c2f644af721568a6f6b23bd66e7beb93.zip
loader/nso: Check if read succeeded in IdentifyFile() before checking magic value
We should always assume the filesystem is volatile and check each IO operation. While we're at it reorganize checks so that early-out errors are near one another.
Diffstat (limited to 'src/core/loader/nso.cpp')
-rw-r--r--src/core/loader/nso.cpp10
1 files changed, 6 insertions, 4 deletions
diff --git a/src/core/loader/nso.cpp b/src/core/loader/nso.cpp
index 2beb85fbf..59049d016 100644
--- a/src/core/loader/nso.cpp
+++ b/src/core/loader/nso.cpp
@@ -55,13 +55,15 @@ AppLoader_NSO::AppLoader_NSO(FileSys::VirtualFile file) : AppLoader(std::move(fi
55 55
56FileType AppLoader_NSO::IdentifyType(const FileSys::VirtualFile& file) { 56FileType AppLoader_NSO::IdentifyType(const FileSys::VirtualFile& file) {
57 u32 magic = 0; 57 u32 magic = 0;
58 file->ReadObject(&magic); 58 if (file->ReadObject(&magic) != sizeof(magic)) {
59 return FileType::Error;
60 }
59 61
60 if (Common::MakeMagic('N', 'S', 'O', '0') == magic) { 62 if (Common::MakeMagic('N', 'S', 'O', '0') != magic) {
61 return FileType::NSO; 63 return FileType::Error;
62 } 64 }
63 65
64 return FileType::Error; 66 return FileType::NSO;
65} 67}
66 68
67static std::vector<u8> DecompressSegment(const std::vector<u8>& compressed_data, 69static std::vector<u8> DecompressSegment(const std::vector<u8>& compressed_data,