From a7ea6ab35502dc06f89a21db38ee09cfabaa7074 Mon Sep 17 00:00:00 2001 From: morkt Date: Fri, 14 Sep 2018 20:55:50 +0400 Subject: [PATCH] (FPK): refined sanity check. --- ArcFormats/Interheart/ArcFPK.cs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/ArcFormats/Interheart/ArcFPK.cs b/ArcFormats/Interheart/ArcFPK.cs index 3da73a72..a9a22a0c 100644 --- a/ArcFormats/Interheart/ArcFPK.cs +++ b/ArcFormats/Interheart/ArcFPK.cs @@ -40,6 +40,11 @@ namespace GameRes.Formats.CandySoft public override bool IsHierarchic { get { return false; } } public override bool CanWrite { get { return false; } } + public FpkOpener () + { + Signatures = new uint[] { 0, 1 }; + } + public override ArcFile TryOpen (ArcView file) { if (file.MaxOffset < 0x10) @@ -76,6 +81,7 @@ namespace GameRes.Formats.CandySoft uint index_size = (uint)((8 + name_size) * count); if (index_size > file.View.Reserve (index_offset, index_size)) return null; + uint data_offset = 4 + index_size; var dir = new List (count); for (int i = 0; i < count; ++i) { @@ -85,7 +91,7 @@ namespace GameRes.Formats.CandySoft var entry = FormatCatalog.Instance.Create (name); entry.Offset = file.View.ReadUInt32 (index_offset); entry.Size = file.View.ReadUInt32 (index_offset+4); - if (entry.Offset < index_size || !entry.CheckPlacement (file.MaxOffset)) + if (entry.Offset < data_offset || !entry.CheckPlacement (file.MaxOffset)) return null; dir.Add (entry); index_offset += 8 + name_size;