diff options
| author | Matthew Parlane <parlane@gmail.com> | 2016-05-01 11:43:30 +1200 |
|---|---|---|
| committer | Matthew Parlane <parlane@gmail.com> | 2016-05-01 11:43:30 +1200 |
| commit | 05e1406e89f08cde5d169dff843ac3d645e71e6c (patch) | |
| tree | 7ba23b1cccbb1001bd5b155693b8a49c9a3c8797 /Source/Core/DiscIO/CompressedBlob.cpp | |
| parent | 3d375592a21a5052d5d1e404871b4d16558796dd (diff) | |
| parent | 97d570f0c9650a25185fe187b97731d30d086fbb (diff) | |
Merge pull request #3795 from EmptyChaos/fix-diskreader
DriveReader: Fix View > Show Drives
Diffstat (limited to 'Source/Core/DiscIO/CompressedBlob.cpp')
| -rw-r--r-- | Source/Core/DiscIO/CompressedBlob.cpp | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/Source/Core/DiscIO/CompressedBlob.cpp b/Source/Core/DiscIO/CompressedBlob.cpp index e41642d483..3e99890c81 100644 --- a/Source/Core/DiscIO/CompressedBlob.cpp +++ b/Source/Core/DiscIO/CompressedBlob.cpp @@ -79,7 +79,7 @@ u64 CompressedBlobReader::GetBlockCompressedSize(u64 block_num) const return 0; } -void CompressedBlobReader::GetBlock(u64 block_num, u8 *out_ptr) +bool CompressedBlobReader::GetBlock(u64 block_num, u8 *out_ptr) { bool uncompressed = false; u32 comp_block_size = (u32)GetBlockCompressedSize(block_num); @@ -97,7 +97,13 @@ void CompressedBlobReader::GetBlock(u64 block_num, u8 *out_ptr) memset(&m_zlib_buffer[comp_block_size], 0, m_zlib_buffer.size() - comp_block_size); m_file.Seek(offset, SEEK_SET); - m_file.ReadBytes(m_zlib_buffer.data(), comp_block_size); + if (!m_file.ReadBytes(m_zlib_buffer.data(), comp_block_size)) + { + PanicAlertT("The disc image \"%s\" is truncated, some of the data is missing.", + m_file_name.c_str()); + m_file.Clear(); + return false; + } // First, check hash. u32 block_hash = HashAdler32(m_zlib_buffer.data(), comp_block_size); @@ -133,8 +139,12 @@ void CompressedBlobReader::GetBlock(u64 block_num, u8 *out_ptr) } inflateEnd(&z); if (uncomp_size != m_header.block_size) + { PanicAlert("Wrong block size"); + return false; + } } + return true; } bool CompressFileToBlob(const std::string& infile, const std::string& outfile, u32 sub_type, |
