fix lzma decompression

This commit is contained in:
Perfare 2021-05-27 03:46:15 +08:00
parent 251854cc41
commit 44b02b92d8
2 changed files with 8 additions and 5 deletions

View File

@ -231,7 +231,9 @@ namespace AssetStudio
} }
case 1: //LZMA case 1: //LZMA
{ {
blocksInfoUncompresseddStream = SevenZipHelper.StreamDecompress(blocksInfoCompressedStream); blocksInfoUncompresseddStream = new MemoryStream((int)(m_Header.uncompressedBlocksInfoSize));
SevenZipHelper.StreamDecompress(blocksInfoCompressedStream, blocksInfoUncompresseddStream, m_Header.compressedBlocksInfoSize, m_Header.uncompressedBlocksInfoSize);
blocksInfoUncompresseddStream.Position = 0;
blocksInfoCompressedStream.Close(); blocksInfoCompressedStream.Close();
break; break;
} }

View File

@ -34,15 +34,16 @@ namespace AssetStudio
return newOutStream; return newOutStream;
} }
public static void StreamDecompress(Stream inStream, Stream outStream, long inSize, long outSize) public static void StreamDecompress(Stream compressedStream, Stream decompressedStream, long compressedSize, long decompressedSize)
{ {
var basePosition = compressedStream.Position;
var decoder = new Decoder(); var decoder = new Decoder();
var properties = new byte[5]; var properties = new byte[5];
if (inStream.Read(properties, 0, 5) != 5) if (compressedStream.Read(properties, 0, 5) != 5)
throw new Exception("input .lzma is too short"); throw new Exception("input .lzma is too short");
decoder.SetDecoderProperties(properties); decoder.SetDecoderProperties(properties);
inSize -= 5L; decoder.Code(compressedStream, decompressedStream, compressedSize - 5, decompressedSize, null);
decoder.Code(inStream, outStream, inSize, outSize, null); compressedStream.Position = basePosition + compressedSize;
} }
} }
} }