diff --git a/ArcFormats/Kaas/ArcKAAS.cs b/ArcFormats/Kaas/ArcKAAS.cs index 79e0b8b1..015156e5 100644 --- a/ArcFormats/Kaas/ArcKAAS.cs +++ b/ArcFormats/Kaas/ArcKAAS.cs @@ -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; diff --git a/ArcFormats/Propeller/ArcMPK.cs b/ArcFormats/Propeller/ArcMPK.cs index 9eae2473..013315ec 100644 --- a/ArcFormats/Propeller/ArcMPK.cs +++ b/ArcFormats/Propeller/ArcMPK.cs @@ -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) diff --git a/ArcFormats/Zyx/ArcBDF.cs b/ArcFormats/Zyx/ArcBDF.cs index b8a1a016..734dc998 100644 --- a/ArcFormats/Zyx/ArcBDF.cs +++ b/ArcFormats/Zyx/ArcBDF.cs @@ -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;