private CtpCommand Inflate(PacketContents mode, long inflatedSize, byte[] payload) { var rv = new byte[inflatedSize]; switch (mode) { case PacketContents.CompressedDeflate: using (var ms = new MemoryStream(payload)) using (var comp = new DeflateStream(ms, CompressionMode.Decompress, true)) { comp.ReadAll(rv, 0, rv.Length); } break; case PacketContents.CompressedZlib: if (m_stream == null) { m_stream = new MemoryStream(); m_inflate = new DeflateStream(m_stream, CompressionMode.Decompress); m_inflate.FlushMode = FlushType.Sync; } m_stream.Write(payload, 0, payload.Length); m_stream.Position = 0; m_inflate.Read(rv, 0, rv.Length); m_stream.SetLength(0); break; default: throw new ArgumentOutOfRangeException(nameof(mode), mode, null); } ReadFromBuffer(out var packet, rv, 0, rv.Length); return(packet); }
private static byte[] Inflate(Stream s, string name) { InternalErrorException MakeError(Exception e) { return(new InternalErrorException($"Failed to decompress {name}", e)); } try { // Eat first two bytes // See: http://stackoverflow.com/a/21544269/362938 s.ReadByte(); s.ReadByte(); using var deflateStream = new DeflateStream(s, CompressionMode.Decompress); return(deflateStream.ReadAll()); } catch (InvalidDataException e) { throw MakeError(e); } catch (IOException e) { throw MakeError(e); } }
private static byte[] InflateBuffer(byte[] compressedBuffer, UInt32 decompressedSize) { using (MemoryStream ms = new MemoryStream(compressedBuffer)) using (DeflateStream deflateStream = new DeflateStream(ms, CompressionMode.Decompress)) { byte[] inflated = new byte[decompressedSize]; deflateStream.ReadAll(inflated); return(inflated); } }
public ZLibStream(Stream stream, long length = -1) { this.stream = new DeflateStream(stream, CompressionMode.Decompress, leaveOpen: false); this.length = length; Span <byte> zlibHeader = stackalloc byte[2]; stream.ReadAll(zlibHeader); if (zlibHeader[0] != 0x78 || (zlibHeader[1] != 0x01 && zlibHeader[1] != 0x9C)) { throw new GitException(); } }
public static byte[] Inflate(byte[] compressed) { using var inputStream = new MemoryStream(compressed, false); using var deflateStream = new DeflateStream(inputStream, CompressionMode.Decompress); return(deflateStream.ReadAll()); }