diff options
| author | JosJuice <josjuice@gmail.com> | 2015-06-03 11:35:05 +0200 |
|---|---|---|
| committer | JosJuice <josjuice@gmail.com> | 2015-06-03 11:35:05 +0200 |
| commit | 78b6ed0218da61bf75f3179850d780ed8f02f3bf (patch) | |
| tree | 7a17a53de1503f76515a2b832943b69e19ef6696 /Source/Core/DiscIO/VolumeGC.cpp | |
| parent | 349f9d549370d1b1ef7662e4cedef0c96133f232 (diff) | |
VolumeGC: Check that opening.bnr size matches type
The old code would accept files with BNR1 length and BNR2 type, which
can be a problem when GetNames tries to read the extra BNR2 strings.
Diffstat (limited to 'Source/Core/DiscIO/VolumeGC.cpp')
| -rw-r--r-- | Source/Core/DiscIO/VolumeGC.cpp | 18 |
1 files changed, 9 insertions, 9 deletions
diff --git a/Source/Core/DiscIO/VolumeGC.cpp b/Source/Core/DiscIO/VolumeGC.cpp index d4883645c9..fca22949ac 100644 --- a/Source/Core/DiscIO/VolumeGC.cpp +++ b/Source/Core/DiscIO/VolumeGC.cpp @@ -291,24 +291,24 @@ bool CVolumeGC::LoadBannerFile() const file_system->ReadFile("opening.bnr", m_banner_file.data(), m_banner_file.size()); u32 bannerSignature = *(u32*)m_banner_file.data(); - switch (bannerSignature) + if (file_size == BNR1_SIZE && bannerSignature == 0x31524e42) // "BNR1" { - case 0x31524e42: // "BNR1" m_banner_file_type = BANNER_BNR1; - break; - case 0x32524e42: // "BNR2" + } + else if (file_size == BNR2_SIZE && bannerSignature == 0x32524e42) // "BNR2" + { m_banner_file_type = BANNER_BNR2; - break; - default: + } + else + { m_banner_file_type = BANNER_INVALID; - WARN_LOG(DISCIO, "Invalid opening.bnr type"); - break; + WARN_LOG(DISCIO, "Invalid opening.bnr. Type: %0x Size: %0lx", bannerSignature, (unsigned long)file_size); } } else { m_banner_file_type = BANNER_INVALID; - WARN_LOG(DISCIO, "Invalid opening.bnr size: %0lx", (unsigned long)file_size); + WARN_LOG(DISCIO, "Invalid opening.bnr. Size: %0lx", (unsigned long)file_size); } return m_banner_file_type != BANNER_INVALID; |
