mirror of
				https://git.zaroz.cloud/nintendo-back-up/yuzu/yuzu.git
				synced 2025-05-12 00:45:25 +00:00 
			
		
		
		
	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 New Issue
	
	Block a user
	 Zach Hilman
						Zach Hilman