(GRP): return compressed stream on decompression errors.

This commit is contained in:
morkt 2017-01-23 18:35:43 +04:00
parent 42dce0e586
commit efbac265ff

View File

@ -159,6 +159,8 @@ namespace GameRes.Formats.Ankh
{ {
var pent = entry as PackedEntry; var pent = entry as PackedEntry;
if (pent != null && pent.IsPacked && pent.Size > 8) if (pent != null && pent.IsPacked && pent.Size > 8)
{
try
{ {
if (arc.File.View.AsciiEqual (entry.Offset, "TPW")) if (arc.File.View.AsciiEqual (entry.Offset, "TPW"))
return OpenTpw (arc, pent); return OpenTpw (arc, pent);
@ -168,6 +170,11 @@ namespace GameRes.Formats.Ankh
&& arc.File.View.AsciiEqual (entry.Offset+8, "RIFF")) && arc.File.View.AsciiEqual (entry.Offset+8, "RIFF"))
return OpenAudio (arc, entry); return OpenAudio (arc, entry);
} }
catch (Exception X)
{
System.Diagnostics.Trace.WriteLine (X.Message, "[GRP]");
}
}
return base.OpenEntry (arc, entry); return base.OpenEntry (arc, entry);
} }
@ -340,7 +347,10 @@ namespace GameRes.Formats.Ankh
if (n != 0) if (n != 0)
count += GetBits (n) + 1; count += GetBits (n) + 1;
} }
Binary.CopyOverlapped (output, dst+offset, dst, count); int src = dst + offset;
if (src < 0)
throw new InvalidDataException();
Binary.CopyOverlapped (output, src, dst, count);
dst += count; dst += count;
} }
else else