additional sanity checks.

This commit is contained in:
morkt 2016-01-18 20:35:43 +04:00
parent 2bae9b188b
commit 38e87316ab
3 changed files with 5 additions and 2 deletions

View File

@ -107,6 +107,8 @@ namespace GameRes.Formats.KAAS
public override ArcFile TryOpen (ArcView file)
{
if (!file.Name.EndsWith (".pb", StringComparison.InvariantCultureIgnoreCase))
return null;
int count = file.View.ReadInt32 (0);
if (count <= 0 || count > 0xfff)
return null;

View File

@ -44,7 +44,7 @@ namespace GameRes.Formats.Propeller
{
uint index_offset = file.View.ReadUInt32 (0);
int count = file.View.ReadInt32 (4);
if (index_offset >= file.MaxOffset || !IsSaneCount (count))
if (index_offset < 8 || index_offset >= file.MaxOffset || !IsSaneCount (count))
return null;
uint index_size = (uint)count * 0x28u;
if (index_size > file.MaxOffset - index_offset)

View File

@ -208,7 +208,8 @@ namespace GameRes.Formats.Zyx
Width = file.View.ReadInt32 (index_offset+0x14),
Height = file.View.ReadInt32 (index_offset+0x18),
};
if (!entry.CheckPlacement (file.MaxOffset))
if (entry.Size < 4 || entry.Width <= 0 || entry.Height <= 0
|| !entry.CheckPlacement (file.MaxOffset))
return null;
dir.Add (entry);
index_offset += 0x1C;