瀏覽代碼

bktr: Fix bucket overlap error

Zach Hilman 7 年之前
父節點
當前提交
c913136eb2

+ 0 - 3
src/core/file_sys/content_archive.cpp

@@ -425,9 +425,6 @@ NCA::NCA(VirtualFile file_, VirtualFile bktr_base_romfs_, u64 bktr_base_ivfc_off
             } else {
                 files.push_back(std::move(dec));
                 romfs = files.back();
-                const u64 raw_size =
-                    MEDIA_OFFSET_MULTIPLIER * (header.section_tables[i].media_end_offset -
-                                               header.section_tables[i].media_offset);
             }
         } else if (section.raw.header.filesystem_type == NCASectionFilesystemType::PFS0) {
             u64 offset = (static_cast<u64>(header.section_tables[i].media_offset) *

+ 2 - 2
src/core/file_sys/nca_patch.cpp

@@ -50,7 +50,7 @@ size_t BKTR::Read(u8* data, size_t length, size_t offset) const {
     }
 
     if (!bktr_read) {
-        ASSERT_MSG(section_offset > ivfc_offset, "Offset calculation negative.");
+        ASSERT_MSG(section_offset >= ivfc_offset, "Offset calculation negative.");
         return base_romfs->Read(data, length, section_offset - ivfc_offset);
     }
 
@@ -118,7 +118,7 @@ std::pair<size_t, size_t> BKTR::SearchBucketEntry(u64 offset, BlockType block,
 
     size_t bucket_id = std::count_if(block.base_offsets.begin() + 1,
                                      block.base_offsets.begin() + block.number_buckets,
-                                     [&offset](u64 base_offset) { return base_offset < offset; });
+                                     [&offset](u64 base_offset) { return base_offset <= offset; });
 
     const auto bucket = buckets[bucket_id];
 

+ 3 - 0
src/core/file_sys/patch_manager.cpp

@@ -2,10 +2,13 @@
 // Licensed under GPLv2 or any later version
 // Refer to the license.txt file included.
 
+#include "core/file_sys/content_archive.h"
 #include "core/file_sys/control_metadata.h"
 #include "core/file_sys/patch_manager.h"
 #include "core/file_sys/registered_cache.h"
+#include "core/file_sys/romfs.h"
 #include "core/hle/service/filesystem/filesystem.h"
+#include "core/loader/loader.h"
 
 namespace FileSys {
 

+ 0 - 1
src/core/file_sys/patch_manager.h

@@ -8,7 +8,6 @@
 #include <string>
 #include "common/common_types.h"
 #include "core/file_sys/nca_metadata.h"
-#include "core/file_sys/romfs_factory.h"
 #include "core/file_sys/vfs.h"
 
 namespace FileSys {

+ 1 - 0
src/core/file_sys/romfs_factory.cpp

@@ -12,6 +12,7 @@
 #include "core/file_sys/patch_manager.h"
 #include "core/file_sys/registered_cache.h"
 #include "core/file_sys/romfs_factory.h"
+#include "core/hle/kernel/process.h"
 #include "core/hle/service/filesystem/filesystem.h"
 #include "core/loader/loader.h"
 

+ 1 - 1
src/core/hle/service/filesystem/filesystem.cpp

@@ -10,6 +10,7 @@
 #include "core/file_sys/bis_factory.h"
 #include "core/file_sys/errors.h"
 #include "core/file_sys/mode.h"
+#include "core/file_sys/registered_cache.h"
 #include "core/file_sys/romfs_factory.h"
 #include "core/file_sys/savedata_factory.h"
 #include "core/file_sys/sdmc_factory.h"
@@ -19,7 +20,6 @@
 #include "core/hle/service/filesystem/fsp_ldr.h"
 #include "core/hle/service/filesystem/fsp_pr.h"
 #include "core/hle/service/filesystem/fsp_srv.h"
-#include "filesystem.h"
 
 namespace Service::FileSystem {
 

+ 2 - 2
src/core/loader/loader.cpp

@@ -93,7 +93,7 @@ std::string GetFileTypeString(FileType type) {
     return "unknown";
 }
 
-constexpr std::array<const char*, 57> RESULT_MESSAGES{
+constexpr std::array<const char*, 58> RESULT_MESSAGES{
     "The operation completed successfully.",
     "The loader requested to load is already loaded.",
     "The operation is not implemented.",
@@ -143,7 +143,7 @@ constexpr std::array<const char*, 57> RESULT_MESSAGES{
     "The AES Key Generation Source could not be found.",
     "The SD Save Key Source could not be found.",
     "The SD NCA Key Source could not be found.",
-    "The NSP file is missing a Program-type NCA."};
+    "The NSP file is missing a Program-type NCA.",
     "The BKTR-type NCA has a bad BKTR header.",
     "The BKTR Subsection entry is not located immediately after the Relocation entry.",
     "The BKTR Subsection entry is not at the end of the media block.",

+ 2 - 0
src/yuzu/main.cpp

@@ -32,6 +32,8 @@
 #include "core/crypto/key_manager.h"
 #include "core/file_sys/card_image.h"
 #include "core/file_sys/content_archive.h"
+#include "core/file_sys/control_metadata.h"
+#include "core/file_sys/patch_manager.h"
 #include "core/file_sys/registered_cache.h"
 #include "core/file_sys/savedata_factory.h"
 #include "core/file_sys/submission_package.h"