Skip to content
Permalink
Browse files
Merge pull request #8585 from JosJuice/volumeverifier-read-error
VolumeVerifier: Report read errors to the user
  • Loading branch information
Tilka committed Jan 25, 2020
2 parents b0e0404 + de26fec commit 14ebdf0
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 24 deletions.
@@ -1114,36 +1114,38 @@ void VolumeVerifier::Process()
const bool is_data_needed = m_calculating_any_hash || content_read || block_read;
const bool read_succeeded = is_data_needed && ReadChunkAndWaitForAsyncOperations(bytes_to_read);

if (!read_succeeded)
{
ERROR_LOG(DISCIO, "Read failed at 0x%" PRIx64 " to 0x%" PRIx64, m_progress,
m_progress + bytes_to_read);

m_read_errors_occurred = true;
m_calculating_any_hash = false;
}

if (m_calculating_any_hash)
{
if (!read_succeeded)
if (m_hashes_to_calculate.crc32)
{
m_calculating_any_hash = false;
m_crc32_future = std::async(std::launch::async, [this] {
// It would be nice to use crc32_z here instead of crc32, but it isn't available on Android
m_crc32_context =
crc32(m_crc32_context, m_data.data(), static_cast<unsigned int>(m_data.size()));
});
}
else
{
if (m_hashes_to_calculate.crc32)
{
m_crc32_future = std::async(std::launch::async, [this] {
// Would be nice to use crc32_z here instead of crc32, but it isn't available on Android
m_crc32_context =
crc32(m_crc32_context, m_data.data(), static_cast<unsigned int>(m_data.size()));
});
}

if (m_hashes_to_calculate.md5)
{
m_md5_future = std::async(std::launch::async, [this] {
mbedtls_md5_update_ret(&m_md5_context, m_data.data(), m_data.size());
});
}
if (m_hashes_to_calculate.md5)
{
m_md5_future = std::async(std::launch::async, [this] {
mbedtls_md5_update_ret(&m_md5_context, m_data.data(), m_data.size());
});
}

if (m_hashes_to_calculate.sha1)
{
m_sha1_future = std::async(std::launch::async, [this] {
mbedtls_sha1_update_ret(&m_sha1_context, m_data.data(), m_data.size());
});
}
if (m_hashes_to_calculate.sha1)
{
m_sha1_future = std::async(std::launch::async, [this] {
mbedtls_sha1_update_ret(&m_sha1_context, m_data.data(), m_data.size());
});
}
}

@@ -1262,6 +1264,9 @@ void VolumeVerifier::Finish()
}
}

if (m_read_errors_occurred)
AddProblem(Severity::Medium, Common::GetStringT("Some of the data could not be read."));

if (IsDisc(m_volume.GetVolumeType()) &&
(m_volume.IsSizeAccurate() || m_volume.SupportsIntegrityCheck()))
{
@@ -174,6 +174,8 @@ class VolumeVerifier final
bool m_redump_verification;
RedumpVerifier m_redump_verifier;

bool m_read_errors_occurred = false;

Hashes<bool> m_hashes_to_calculate{};
bool m_calculating_any_hash = false;
unsigned long m_crc32_context = 0;

0 comments on commit 14ebdf0

Please sign in to comment.