 
         // If file has data descriptor, then some values in local header are absent.
         // So we need to use values from CD entry.
-        // TODO:
-        var uncompSize = hasDataDescriptor ?
-            Int(truncatingIfNeeded: info.cdEntry.uncompSize) :
-            Int(truncatingIfNeeded: info.localHeader.uncompSize)
+        // TODO: Order in case of data descriptor?
+        // TODO: Remove Int(truncatingIfNeeded:) completely.
+        var uncompSize = hasDataDescriptor ? info.cdEntry.uncompSize : info.localHeader.uncompSize
         var compSize = hasDataDescriptor ?
             Int(truncatingIfNeeded: info.cdEntry.compSize) :
             Int(truncatingIfNeeded: info.localHeader.compSize)

        pointerData.index = info.localHeader.dataOffset
        switch info.compressionMethod {
        case .copy:
            fileBytes = pointerData.bytes(count: uncompSize)
        case .deflate:
            let bitReader = BitReader(data: pointerData.data, bitOrder: .reversed)
            bitReader.index = pointerData.index

        case .lzma:
            #if (!SWCOMPRESSION_POD_ZIP) || (SWCOMPRESSION_POD_ZIP && SWCOMPRESSION_POD_LZMA)
                pointerData.index += 4 // Skipping LZMA SDK version and size of properties.

                let decoder = try LZMATempDecoder(pointerData)

                try decoder.setProperties(from: pointerData.byte())
                decoder.resetStateAndDecoders()
                decoder.dictionarySize = pointerData.uint32().toInt()

                if uncompSize == UInt64.max {
                    decoder.uncompressedSize = -1
                } else {
                    decoder.uncompressedSize = Int(truncatingIfNeeded: uncompSize)
                }

                try decoder.decode()
                fileBytes = decoder.out
            #else
                throw ZipError.compressionNotSupported
            #endif
