diff options
Diffstat (limited to 'src/core/file_sys')
| -rw-r--r-- | src/core/file_sys/content_archive.cpp | 10 | ||||
| -rw-r--r-- | src/core/file_sys/vfs.cpp | 7 | ||||
| -rw-r--r-- | src/core/file_sys/vfs_offset.cpp | 7 | ||||
| -rw-r--r-- | src/core/file_sys/vfs_static.h | 8 |
4 files changed, 18 insertions, 14 deletions
diff --git a/src/core/file_sys/content_archive.cpp b/src/core/file_sys/content_archive.cpp index 426fb6bb5..76af47ff9 100644 --- a/src/core/file_sys/content_archive.cpp +++ b/src/core/file_sys/content_archive.cpp | |||
| @@ -323,7 +323,7 @@ bool NCA::ReadRomFSSection(const NCASectionHeader& section, const NCASectionTabl | |||
| 323 | subsection_buckets.back().entries.push_back({section.bktr.relocation.offset, {0}, ctr_low}); | 323 | subsection_buckets.back().entries.push_back({section.bktr.relocation.offset, {0}, ctr_low}); |
| 324 | subsection_buckets.back().entries.push_back({size, {0}, 0}); | 324 | subsection_buckets.back().entries.push_back({size, {0}, 0}); |
| 325 | 325 | ||
| 326 | std::optional<Core::Crypto::Key128> key = {}; | 326 | std::optional<Core::Crypto::Key128> key; |
| 327 | if (encrypted) { | 327 | if (encrypted) { |
| 328 | if (has_rights_id) { | 328 | if (has_rights_id) { |
| 329 | status = Loader::ResultStatus::Success; | 329 | status = Loader::ResultStatus::Success; |
| @@ -442,18 +442,18 @@ std::optional<Core::Crypto::Key128> NCA::GetTitlekey() { | |||
| 442 | memcpy(rights_id.data(), header.rights_id.data(), 16); | 442 | memcpy(rights_id.data(), header.rights_id.data(), 16); |
| 443 | if (rights_id == u128{}) { | 443 | if (rights_id == u128{}) { |
| 444 | status = Loader::ResultStatus::ErrorInvalidRightsID; | 444 | status = Loader::ResultStatus::ErrorInvalidRightsID; |
| 445 | return {}; | 445 | return std::nullopt; |
| 446 | } | 446 | } |
| 447 | 447 | ||
| 448 | auto titlekey = keys.GetKey(Core::Crypto::S128KeyType::Titlekey, rights_id[1], rights_id[0]); | 448 | auto titlekey = keys.GetKey(Core::Crypto::S128KeyType::Titlekey, rights_id[1], rights_id[0]); |
| 449 | if (titlekey == Core::Crypto::Key128{}) { | 449 | if (titlekey == Core::Crypto::Key128{}) { |
| 450 | status = Loader::ResultStatus::ErrorMissingTitlekey; | 450 | status = Loader::ResultStatus::ErrorMissingTitlekey; |
| 451 | return {}; | 451 | return std::nullopt; |
| 452 | } | 452 | } |
| 453 | 453 | ||
| 454 | if (!keys.HasKey(Core::Crypto::S128KeyType::Titlekek, master_key_id)) { | 454 | if (!keys.HasKey(Core::Crypto::S128KeyType::Titlekek, master_key_id)) { |
| 455 | status = Loader::ResultStatus::ErrorMissingTitlekek; | 455 | status = Loader::ResultStatus::ErrorMissingTitlekek; |
| 456 | return {}; | 456 | return std::nullopt; |
| 457 | } | 457 | } |
| 458 | 458 | ||
| 459 | Core::Crypto::AESCipher<Core::Crypto::Key128> cipher( | 459 | Core::Crypto::AESCipher<Core::Crypto::Key128> cipher( |
| @@ -477,7 +477,7 @@ VirtualFile NCA::Decrypt(const NCASectionHeader& s_header, VirtualFile in, u64 s | |||
| 477 | case NCASectionCryptoType::BKTR: | 477 | case NCASectionCryptoType::BKTR: |
| 478 | LOG_TRACE(Crypto, "called with mode=CTR, starting_offset={:016X}", starting_offset); | 478 | LOG_TRACE(Crypto, "called with mode=CTR, starting_offset={:016X}", starting_offset); |
| 479 | { | 479 | { |
| 480 | std::optional<Core::Crypto::Key128> key = {}; | 480 | std::optional<Core::Crypto::Key128> key; |
| 481 | if (has_rights_id) { | 481 | if (has_rights_id) { |
| 482 | status = Loader::ResultStatus::Success; | 482 | status = Loader::ResultStatus::Success; |
| 483 | key = GetTitlekey(); | 483 | key = GetTitlekey(); |
diff --git a/src/core/file_sys/vfs.cpp b/src/core/file_sys/vfs.cpp index a4c3f67c4..b2f026b6d 100644 --- a/src/core/file_sys/vfs.cpp +++ b/src/core/file_sys/vfs.cpp | |||
| @@ -169,11 +169,12 @@ VfsDirectory::~VfsDirectory() = default; | |||
| 169 | 169 | ||
| 170 | std::optional<u8> VfsFile::ReadByte(std::size_t offset) const { | 170 | std::optional<u8> VfsFile::ReadByte(std::size_t offset) const { |
| 171 | u8 out{}; | 171 | u8 out{}; |
| 172 | std::size_t size = Read(&out, 1, offset); | 172 | const std::size_t size = Read(&out, sizeof(u8), offset); |
| 173 | if (size == 1) | 173 | if (size == 1) { |
| 174 | return out; | 174 | return out; |
| 175 | } | ||
| 175 | 176 | ||
| 176 | return {}; | 177 | return std::nullopt; |
| 177 | } | 178 | } |
| 178 | 179 | ||
| 179 | std::vector<u8> VfsFile::ReadBytes(std::size_t size, std::size_t offset) const { | 180 | std::vector<u8> VfsFile::ReadBytes(std::size_t size, std::size_t offset) const { |
diff --git a/src/core/file_sys/vfs_offset.cpp b/src/core/file_sys/vfs_offset.cpp index c96f88488..7714d3de5 100644 --- a/src/core/file_sys/vfs_offset.cpp +++ b/src/core/file_sys/vfs_offset.cpp | |||
| @@ -58,10 +58,11 @@ std::size_t OffsetVfsFile::Write(const u8* data, std::size_t length, std::size_t | |||
| 58 | } | 58 | } |
| 59 | 59 | ||
| 60 | std::optional<u8> OffsetVfsFile::ReadByte(std::size_t r_offset) const { | 60 | std::optional<u8> OffsetVfsFile::ReadByte(std::size_t r_offset) const { |
| 61 | if (r_offset < size) | 61 | if (r_offset >= size) { |
| 62 | return file->ReadByte(offset + r_offset); | 62 | return std::nullopt; |
| 63 | } | ||
| 63 | 64 | ||
| 64 | return {}; | 65 | return file->ReadByte(offset + r_offset); |
| 65 | } | 66 | } |
| 66 | 67 | ||
| 67 | std::vector<u8> OffsetVfsFile::ReadBytes(std::size_t r_size, std::size_t r_offset) const { | 68 | std::vector<u8> OffsetVfsFile::ReadBytes(std::size_t r_size, std::size_t r_offset) const { |
diff --git a/src/core/file_sys/vfs_static.h b/src/core/file_sys/vfs_static.h index 9f5a90b1b..8b27c30fa 100644 --- a/src/core/file_sys/vfs_static.h +++ b/src/core/file_sys/vfs_static.h | |||
| @@ -54,9 +54,11 @@ public: | |||
| 54 | } | 54 | } |
| 55 | 55 | ||
| 56 | std::optional<u8> ReadByte(std::size_t offset) const override { | 56 | std::optional<u8> ReadByte(std::size_t offset) const override { |
| 57 | if (offset < size) | 57 | if (offset >= size) { |
| 58 | return value; | 58 | return std::nullopt; |
| 59 | return {}; | 59 | } |
| 60 | |||
| 61 | return value; | ||
| 60 | } | 62 | } |
| 61 | 63 | ||
| 62 | std::vector<u8> ReadBytes(std::size_t length, std::size_t offset) const override { | 64 | std::vector<u8> ReadBytes(std::size_t length, std::size_t offset) const override { |