diff --git a/Sources/LZMA/LZMA.swift b/Sources/LZMA/LZMA.swift index 49b9c92c..2e3ff5bb 100644 --- a/Sources/LZMA/LZMA.swift +++ b/Sources/LZMA/LZMA.swift @@ -28,9 +28,21 @@ public class LZMA: DecompressionAlgorithm { } static func decompress(_ pointerData: DataWithPointer) throws -> [UInt8] { - let lzmaDecoder = try LZMADecoder(pointerData) - try lzmaDecoder.decodeLZMA() - return lzmaDecoder.out + let decoder = try LZMATempDecoder(pointerData) + + try decoder.setProperties(from: pointerData.byte()) + decoder.resetStateAndDecoders() + decoder.dictionarySize = pointerData.uint32().toInt() + + let uncompressedSize = pointerData.uint64() + if uncompressedSize == UInt64.max { + decoder.uncompressedSize = -1 + } else { + decoder.uncompressedSize = Int(truncatingIfNeeded: uncompressedSize) + } + + try decoder.decode() + return decoder.out } }