Bladeren bron

NCCH: Updated ExeFS memory allocation to be safer.

bunnei 12 jaren geleden
bovenliggende
commit
b70c4fb48e
2 gewijzigde bestanden met toevoegingen van 7 en 1 verwijderingen
  1. 1 0
      src/core/loader/loader.h
  2. 6 1
      src/core/loader/ncch.cpp

+ 1 - 0
src/core/loader/loader.h

@@ -32,6 +32,7 @@ enum class ResultStatus {
     ErrorNotLoaded,
     ErrorNotLoaded,
     ErrorNotUsed,
     ErrorNotUsed,
     ErrorAlreadyLoaded,
     ErrorAlreadyLoaded,
+    ErrorMemoryAllocationFailed,
 };
 };
 
 
 /// Interface for loading an application
 /// Interface for loading an application

+ 6 - 1
src/core/loader/ncch.cpp

@@ -157,7 +157,12 @@ ResultStatus AppLoader_NCCH::LoadSectionExeFS(const char* name, std::vector<u8>&
                 // Section is compressed...
                 // Section is compressed...
                 if (i == 0 && is_compressed) {
                 if (i == 0 && is_compressed) {
                     // Read compressed .code section...
                     // Read compressed .code section...
-                    std::unique_ptr<u8[]> temp_buffer(new u8[exefs_header.section[i].size]);
+                    std::unique_ptr<u8[]> temp_buffer;
+                    try {
+                        temp_buffer.reset(new u8[exefs_header.section[i].size]);
+                    } catch (std::bad_alloc&) {
+                        return ResultStatus::ErrorMemoryAllocationFailed;
+                    }
                     file.ReadBytes(&temp_buffer[0], exefs_header.section[i].size);
                     file.ReadBytes(&temp_buffer[0], exefs_header.section[i].size);
 
 
                     // Decompress .code section...
                     // Decompress .code section...