mirror of
https://github.com/RetroDECK/Duckstation.git
synced 2025-01-18 06:25:37 +00:00
CDImageEcm: Better error handling for corrupted dumps
This commit is contained in:
parent
1e2bdc11e7
commit
d53daf2f26
|
@ -234,6 +234,17 @@ bool CDImageEcm::Open(const char* filename, Common::Error* error)
|
|||
return false;
|
||||
}
|
||||
|
||||
s64 file_size;
|
||||
if (FileSystem::FSeek64(m_fp, 0, SEEK_END) != 0 || (file_size = FileSystem::FTell64(m_fp)) <= 0 ||
|
||||
FileSystem::FSeek64(m_fp, 0, SEEK_SET) != 0)
|
||||
{
|
||||
Log_ErrorPrintf("Get file size failed: errno %d", errno);
|
||||
if (error)
|
||||
error->SetErrno(errno);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
char header[4];
|
||||
if (std::fread(header, sizeof(header), 1, m_fp) != 1 || header[0] != 'E' || header[1] != 'C' || header[2] != 'M' ||
|
||||
header[3] != 0)
|
||||
|
@ -306,6 +317,13 @@ bool CDImageEcm::Open(const char* filename, Common::Error* error)
|
|||
disc_offset += size;
|
||||
file_offset += size;
|
||||
count -= size;
|
||||
|
||||
if (static_cast<s64>(file_offset) > file_size)
|
||||
{
|
||||
Log_ErrorPrintf("Out of file bounds after %zu chunks", m_data_map.size());
|
||||
if (error)
|
||||
error->SetFormattedMessage("Out of file bounds after %zu chunks", m_data_map.size());
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -317,6 +335,13 @@ bool CDImageEcm::Open(const char* filename, Common::Error* error)
|
|||
m_data_map.emplace(disc_offset, SectorEntry{file_offset, chunk_size, type});
|
||||
disc_offset += chunk_size;
|
||||
file_offset += size;
|
||||
|
||||
if (static_cast<s64>(file_offset) > file_size)
|
||||
{
|
||||
Log_ErrorPrintf("Out of file bounds after %zu chunks", m_data_map.size());
|
||||
if (error)
|
||||
error->SetFormattedMessage("Out of file bounds after %zu chunks", m_data_map.size());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue