mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2024-11-15 05:47:56 -07:00
VolumeVerifier: Make "no valid data in partition" hide some other errors
Not much use in knowing that the H3 hashes are wrong when the partition consists of complete garbage.
This commit is contained in:
parent
0f5bf90013
commit
bb03280462
@ -523,6 +523,41 @@ bool VolumeVerifier::CheckPartition(const Partition& partition)
|
||||
Common::FmtFormatT("The {0} partition is not properly aligned.", name));
|
||||
}
|
||||
|
||||
bool invalid_header = false;
|
||||
bool blank_contents = false;
|
||||
std::vector<u8> disc_header(0x80);
|
||||
constexpr u32 WII_MAGIC = 0x5D1C9EA3;
|
||||
if (!m_volume.Read(0, disc_header.size(), disc_header.data(), partition))
|
||||
{
|
||||
invalid_header = true;
|
||||
}
|
||||
else if (Common::swap32(disc_header.data() + 0x18) != WII_MAGIC)
|
||||
{
|
||||
for (size_t i = 0; i < disc_header.size(); i += 4)
|
||||
{
|
||||
if (Common::swap32(disc_header.data() + i) != i)
|
||||
{
|
||||
invalid_header = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// The loop above ends without setting invalid_header for discs that legitimately lack
|
||||
// updates. No such discs have been released to end users. Most such discs are debug signed,
|
||||
// but there is apparently at least one that is retail signed, the Movie-Ch Install Disc.
|
||||
if (!invalid_header)
|
||||
blank_contents = true;
|
||||
}
|
||||
if (invalid_header)
|
||||
{
|
||||
// This can happen when certain programs that create WBFS files scrub the entirety of
|
||||
// the Masterpiece partitions in Super Smash Bros. Brawl without removing them from
|
||||
// the partition table. https://bugs.dolphin-emu.org/issues/8733
|
||||
AddProblem(severity,
|
||||
Common::FmtFormatT("The {0} partition does not seem to contain valid data.", name));
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!m_is_datel)
|
||||
{
|
||||
IOS::HLE::Kernel ios;
|
||||
@ -549,40 +584,6 @@ bool VolumeVerifier::CheckPartition(const Partition& partition)
|
||||
Common::FmtFormatT("The H3 hash table for the {0} partition is not correct.", name));
|
||||
}
|
||||
|
||||
bool invalid_disc_header = false;
|
||||
std::vector<u8> disc_header(0x80);
|
||||
constexpr u32 WII_MAGIC = 0x5D1C9EA3;
|
||||
if (!m_volume.Read(0, disc_header.size(), disc_header.data(), partition))
|
||||
{
|
||||
invalid_disc_header = true;
|
||||
}
|
||||
else if (Common::swap32(disc_header.data() + 0x18) != WII_MAGIC)
|
||||
{
|
||||
for (size_t i = 0; i < disc_header.size(); i += 4)
|
||||
{
|
||||
if (Common::swap32(disc_header.data() + i) != i)
|
||||
{
|
||||
invalid_disc_header = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// The loop above ends without setting invalid_disc_header for discs that legitimately lack
|
||||
// updates. No such discs have been released to end users. Most such discs are debug signed,
|
||||
// but there is apparently at least one that is retail signed, the Movie-Ch Install Disc.
|
||||
if (!invalid_disc_header)
|
||||
return false;
|
||||
}
|
||||
if (invalid_disc_header)
|
||||
{
|
||||
AddProblem(severity,
|
||||
// This can happen when certain programs that create WBFS files scrub the entirety of
|
||||
// the Masterpiece partitions in Super Smash Bros. Brawl without removing them from
|
||||
// the partition table. https://bugs.dolphin-emu.org/issues/8733
|
||||
Common::FmtFormatT("The {0} partition does not seem to contain valid data.", name));
|
||||
return false;
|
||||
}
|
||||
|
||||
// Prepare for hash verification in the Process step
|
||||
if (m_volume.SupportsIntegrityCheck())
|
||||
{
|
||||
@ -597,6 +598,9 @@ bool VolumeVerifier::CheckPartition(const Partition& partition)
|
||||
m_block_errors.emplace(partition, 0);
|
||||
}
|
||||
|
||||
if (blank_contents)
|
||||
return false;
|
||||
|
||||
const DiscIO::FileSystem* filesystem = m_volume.GetFileSystem(partition);
|
||||
if (!filesystem)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user