From 2e550b1895434bc5aefc2feb1c70b7fb9afeb3f0 Mon Sep 17 00:00:00 2001 From: Kurt Date: Sat, 11 Jul 2015 23:32:02 -0700 Subject: [PATCH] Switch method logic Only comparing 3 of the chars at most to a list of valid 3char extensions. --- pk3DS/3DS/FileFormat.cs | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/pk3DS/3DS/FileFormat.cs b/pk3DS/3DS/FileFormat.cs index 05e0d46..a59da9e 100644 --- a/pk3DS/3DS/FileFormat.cs +++ b/pk3DS/3DS/FileFormat.cs @@ -169,16 +169,12 @@ internal static bool Guess3CHAR(BinaryReader br, out string ext) ext = ""; // Reset extension try { - byte[] magic = Encoding.ASCII.GetBytes(br.ReadChars(4)); - if (magic[0] < 0x41) - return false; - for (int i = 0; i < magic.Length && i < 3; i++) - { - if ((magic[i] >= 'a' && magic[i] <= 'z') || (magic[i] >= 'A' && magic[i] <= 'Z') || char.IsDigit((char)magic[i])) - ext += (char)magic[i]; - else - return false; - } + byte[] magic = Encoding.ASCII.GetBytes(br.ReadChars(3)); + + ext = Encoding.ASCII.GetString(magic); + // Return BaseStream position to the start. + br.BaseStream.Position = position; + return validEXT.Contains(ext); } catch { }