From d7ef400a3155db81156cc105b05454d105590028 Mon Sep 17 00:00:00 2001 From: morkt Date: Sat, 5 Mar 2016 17:18:28 +0400 Subject: [PATCH] (Xp3Opener): additional sanity check when searching archives inside EXE files. --- ArcFormats/KiriKiri/ArcXP3.cs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/ArcFormats/KiriKiri/ArcXP3.cs b/ArcFormats/KiriKiri/ArcXP3.cs index 3d3eaa59..d706ed53 100644 --- a/ArcFormats/KiriKiri/ArcXP3.cs +++ b/ArcFormats/KiriKiri/ArcXP3.cs @@ -315,11 +315,18 @@ NextEntry: try { for (byte* ptr = page_begin; ptr != page_end; ++ptr) { + // TODO: search every byte only when inside resource section, + // otherwise stick to paragraph boundary. int i = 0; while (ptr[i] == s_xp3_header[i]) { if (++i == s_xp3_header.Length) + { + // check whether index offset is non-zero + if (0 == *(uint*)(ptr+i)) + break; return offset + (ptr - page_begin); + } } } }