summaryrefslogtreecommitdiff
path: root/Source/Core/DiscIO/CompressedBlob.h
diff options
context:
space:
mode:
authorJosJuice <josjuice@gmail.com>2026-08-01 12:26:10 +0200
committerGitHub <noreply@github.com>2026-08-01 12:26:10 +0200
commitad7e793548684a183593326584313f7e2bdce4d9 (patch)
treea10e3ca58df7d81fcfb8eead63dad0e453c45a50 /Source/Core/DiscIO/CompressedBlob.h
parent3c63788e019e5be3a74429c025bd839c520ec569 (diff)
parent4782a04c2032e02ba7785b1378036ba30d579ce9 (diff)
Merge pull request #14768 from phire/security/gcz_overflows
Better validation and handling of GCZ
Diffstat (limited to 'Source/Core/DiscIO/CompressedBlob.h')
-rw-r--r--Source/Core/DiscIO/CompressedBlob.h25
1 files changed, 14 insertions, 11 deletions
diff --git a/Source/Core/DiscIO/CompressedBlob.h b/Source/Core/DiscIO/CompressedBlob.h
index 943353b169..712bb93917 100644
--- a/Source/Core/DiscIO/CompressedBlob.h
+++ b/Source/Core/DiscIO/CompressedBlob.h
@@ -35,7 +35,7 @@ struct CompressedBlobHeader // 32 bytes
u32 magic_cookie; // 0xB10BB10B
u32 sub_type; // GC image, whatever
u64 compressed_data_size;
- u64 data_size;
+ u64 disc_size;
u32 block_size;
u32 num_blocks;
};
@@ -53,7 +53,7 @@ public:
std::unique_ptr<BlobReader> CopyReader() const override;
u64 GetRawSize() const override { return m_file_size; }
- u64 GetDataSize() const override { return m_header.data_size; }
+ u64 GetDataSize() const override { return m_header.disc_size; }
DataSizeType GetDataSizeType() const override { return DataSizeType::Accurate; }
u64 GetBlockSize() const override { return m_header.block_size; }
@@ -66,15 +66,18 @@ public:
private:
CompressedBlobReader(File::DirectIOFile file, std::string filename);
-
- CompressedBlobHeader m_header;
- std::vector<u64> m_block_pointers;
- std::vector<u32> m_hashes;
- int m_data_offset;
- File::DirectIOFile m_file;
- u64 m_file_size;
- std::vector<u8> m_zlib_buffer;
- std::string m_file_name;
+ bool Initialize();
+ bool ValidateBlockPointers() const;
+
+ CompressedBlobHeader m_header = {};
+ std::vector<u64> m_block_pointers = {};
+ std::vector<u32> m_hashes = {};
+ u64 m_data_offset = 0;
+ File::DirectIOFile m_file = {};
+ u64 m_file_size = 0;
+ std::vector<u8> m_zlib_buffer = {};
+ std::string m_file_name = {};
+ bool m_valid = false;
};
} // namespace DiscIO