From 9b22f856c2f644af721568a6f6b23bd66e7beb93 Mon Sep 17 00:00:00 2001
From: Lioncash <mathew1800@gmail.com>
Date: Thu, 19 Jul 2018 12:40:06 -0400
Subject: [PATCH] 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.
---
 src/core/loader/nso.cpp | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/src/core/loader/nso.cpp b/src/core/loader/nso.cpp
index 2beb85fbf4..59049d016e 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
 
 FileType AppLoader_NSO::IdentifyType(const FileSys::VirtualFile& file) {
     u32 magic = 0;
-    file->ReadObject(&magic);
-
-    if (Common::MakeMagic('N', 'S', 'O', '0') == magic) {
-        return FileType::NSO;
+    if (file->ReadObject(&magic) != sizeof(magic)) {
+        return FileType::Error;
     }
 
-    return FileType::Error;
+    if (Common::MakeMagic('N', 'S', 'O', '0') != magic) {
+        return FileType::Error;
+    }
+
+    return FileType::NSO;
 }
 
 static std::vector<u8> DecompressSegment(const std::vector<u8>& compressed_data,