bktr: Fix bucket overlap error
This commit is contained in:
parent
7d5d781b20
commit
c913136eb2
|
@ -425,9 +425,6 @@ NCA::NCA(VirtualFile file_, VirtualFile bktr_base_romfs_, u64 bktr_base_ivfc_off
|
||||||
} else {
|
} else {
|
||||||
files.push_back(std::move(dec));
|
files.push_back(std::move(dec));
|
||||||
romfs = files.back();
|
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) {
|
} else if (section.raw.header.filesystem_type == NCASectionFilesystemType::PFS0) {
|
||||||
u64 offset = (static_cast<u64>(header.section_tables[i].media_offset) *
|
u64 offset = (static_cast<u64>(header.section_tables[i].media_offset) *
|
||||||
|
|
|
@ -50,7 +50,7 @@ size_t BKTR::Read(u8* data, size_t length, size_t offset) const {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!bktr_read) {
|
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);
|
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,
|
size_t bucket_id = std::count_if(block.base_offsets.begin() + 1,
|
||||||
block.base_offsets.begin() + block.number_buckets,
|
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];
|
const auto bucket = buckets[bucket_id];
|
||||||
|
|
||||||
|
|
|
@ -2,10 +2,13 @@
|
||||||
// Licensed under GPLv2 or any later version
|
// Licensed under GPLv2 or any later version
|
||||||
// Refer to the license.txt file included.
|
// 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/control_metadata.h"
|
||||||
#include "core/file_sys/patch_manager.h"
|
#include "core/file_sys/patch_manager.h"
|
||||||
#include "core/file_sys/registered_cache.h"
|
#include "core/file_sys/registered_cache.h"
|
||||||
|
#include "core/file_sys/romfs.h"
|
||||||
#include "core/hle/service/filesystem/filesystem.h"
|
#include "core/hle/service/filesystem/filesystem.h"
|
||||||
|
#include "core/loader/loader.h"
|
||||||
|
|
||||||
namespace FileSys {
|
namespace FileSys {
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,6 @@
|
||||||
#include <string>
|
#include <string>
|
||||||
#include "common/common_types.h"
|
#include "common/common_types.h"
|
||||||
#include "core/file_sys/nca_metadata.h"
|
#include "core/file_sys/nca_metadata.h"
|
||||||
#include "core/file_sys/romfs_factory.h"
|
|
||||||
#include "core/file_sys/vfs.h"
|
#include "core/file_sys/vfs.h"
|
||||||
|
|
||||||
namespace FileSys {
|
namespace FileSys {
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
#include "core/file_sys/patch_manager.h"
|
#include "core/file_sys/patch_manager.h"
|
||||||
#include "core/file_sys/registered_cache.h"
|
#include "core/file_sys/registered_cache.h"
|
||||||
#include "core/file_sys/romfs_factory.h"
|
#include "core/file_sys/romfs_factory.h"
|
||||||
|
#include "core/hle/kernel/process.h"
|
||||||
#include "core/hle/service/filesystem/filesystem.h"
|
#include "core/hle/service/filesystem/filesystem.h"
|
||||||
#include "core/loader/loader.h"
|
#include "core/loader/loader.h"
|
||||||
|
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
#include "core/file_sys/bis_factory.h"
|
#include "core/file_sys/bis_factory.h"
|
||||||
#include "core/file_sys/errors.h"
|
#include "core/file_sys/errors.h"
|
||||||
#include "core/file_sys/mode.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/romfs_factory.h"
|
||||||
#include "core/file_sys/savedata_factory.h"
|
#include "core/file_sys/savedata_factory.h"
|
||||||
#include "core/file_sys/sdmc_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_ldr.h"
|
||||||
#include "core/hle/service/filesystem/fsp_pr.h"
|
#include "core/hle/service/filesystem/fsp_pr.h"
|
||||||
#include "core/hle/service/filesystem/fsp_srv.h"
|
#include "core/hle/service/filesystem/fsp_srv.h"
|
||||||
#include "filesystem.h"
|
|
||||||
|
|
||||||
namespace Service::FileSystem {
|
namespace Service::FileSystem {
|
||||||
|
|
||||||
|
|
|
@ -93,7 +93,7 @@ std::string GetFileTypeString(FileType type) {
|
||||||
return "unknown";
|
return "unknown";
|
||||||
}
|
}
|
||||||
|
|
||||||
constexpr std::array<const char*, 57> RESULT_MESSAGES{
|
constexpr std::array<const char*, 58> RESULT_MESSAGES{
|
||||||
"The operation completed successfully.",
|
"The operation completed successfully.",
|
||||||
"The loader requested to load is already loaded.",
|
"The loader requested to load is already loaded.",
|
||||||
"The operation is not implemented.",
|
"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 AES Key Generation Source could not be found.",
|
||||||
"The SD Save Key Source could not be found.",
|
"The SD Save Key Source could not be found.",
|
||||||
"The SD NCA 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-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 located immediately after the Relocation entry.",
|
||||||
"The BKTR Subsection entry is not at the end of the media block.",
|
"The BKTR Subsection entry is not at the end of the media block.",
|
||||||
|
|
|
@ -32,6 +32,8 @@
|
||||||
#include "core/crypto/key_manager.h"
|
#include "core/crypto/key_manager.h"
|
||||||
#include "core/file_sys/card_image.h"
|
#include "core/file_sys/card_image.h"
|
||||||
#include "core/file_sys/content_archive.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/registered_cache.h"
|
||||||
#include "core/file_sys/savedata_factory.h"
|
#include "core/file_sys/savedata_factory.h"
|
||||||
#include "core/file_sys/submission_package.h"
|
#include "core/file_sys/submission_package.h"
|
||||||
|
|
Loading…
Reference in a new issue