diff --git a/Unity Studio/7zip/SevenZipHelper.cs b/Unity Studio/7zip/SevenZipHelper.cs index f70fe42..6c418c6 100644 --- a/Unity Studio/7zip/SevenZipHelper.cs +++ b/Unity Studio/7zip/SevenZipHelper.cs @@ -122,5 +122,23 @@ namespace SevenZip.Compression.LZMA return newOutStream; } + public static MemoryStream StreamDecompress(MemoryStream newInStream, long outSize) + { + SevenZip.Compression.LZMA.Decoder decoder = new SevenZip.Compression.LZMA.Decoder(); + + newInStream.Seek(0, 0); + MemoryStream newOutStream = new MemoryStream(); + + byte[] properties2 = new byte[5]; + if (newInStream.Read(properties2, 0, 5) != 5) + throw (new Exception("input .lzma is too short")); + decoder.SetDecoderProperties(properties2); + + long compressedSize = newInStream.Length - newInStream.Position; + decoder.Code(newInStream, newOutStream, compressedSize, outSize, null); + + newOutStream.Position = 0; + return newOutStream; + } } } diff --git a/Unity Studio/BundleFile.cs b/Unity Studio/BundleFile.cs index 90f938a..e8bb361 100644 --- a/Unity Studio/BundleFile.cs +++ b/Unity Studio/BundleFile.cs @@ -173,7 +173,7 @@ namespace Unity_Studio var uncompressedBytes = new byte[uncompressedSize]; using (var mstream = new MemoryStream(compressedBytes)) { - var decoder = SevenZip.Compression.LZMA.SevenZipHelper.StreamDecompress(mstream); + var decoder = SevenZip.Compression.LZMA.SevenZipHelper.StreamDecompress(mstream, uncompressedSize); decoder.Read(uncompressedBytes, 0, uncompressedSize); decoder.Dispose(); }