From 1cbfeea0cd8eb4ba21b83dea08f589514925bac3 Mon Sep 17 00:00:00 2001 From: Darien Raymond Date: Mon, 12 Mar 2018 22:10:13 +0100 Subject: [PATCH] simplify NewSize calls --- app/proxyman/mux/reader.go | 7 +------ common/crypto/auth.go | 7 +------ proxy/shadowsocks/ota.go | 20 ++++++-------------- 3 files changed, 8 insertions(+), 26 deletions(-) diff --git a/app/proxyman/mux/reader.go b/app/proxyman/mux/reader.go index 33453b71..b2e1a411 100644 --- a/app/proxyman/mux/reader.go +++ b/app/proxyman/mux/reader.go @@ -51,12 +51,7 @@ func (r *PacketReader) ReadMultiBuffer() (buf.MultiBuffer, error) { return nil, err } - var b *buf.Buffer - if size <= buf.Size { - b = buf.New() - } else { - b = buf.NewSize(uint32(size)) - } + b := buf.NewSize(uint32(size)) if err := b.AppendSupplier(buf.ReadFullFrom(r.reader, int(size))); err != nil { b.Release() return nil, err diff --git a/common/crypto/auth.go b/common/crypto/auth.go index ecdb0189..84f5b41a 100644 --- a/common/crypto/auth.go +++ b/common/crypto/auth.go @@ -124,12 +124,7 @@ func (r *AuthenticationReader) ReadMultiBuffer() (buf.MultiBuffer, error) { return nil, io.EOF } - var b *buf.Buffer - if size <= buf.Size { - b = buf.New() - } else { - b = buf.NewSize(uint32(size)) - } + b := buf.NewSize(uint32(size)) if err := b.Reset(buf.ReadFullFrom(r.reader, size)); err != nil { b.Release() return nil, err diff --git a/proxy/shadowsocks/ota.go b/proxy/shadowsocks/ota.go index d1015e0f..be18be8c 100644 --- a/proxy/shadowsocks/ota.go +++ b/proxy/shadowsocks/ota.go @@ -70,22 +70,14 @@ func NewChunkReader(reader io.Reader, auth *Authenticator) *ChunkReader { } func (v *ChunkReader) ReadMultiBuffer() (buf.MultiBuffer, error) { - buffer := buf.New() - if err := buffer.AppendSupplier(buf.ReadFullFrom(v.reader, 2)); err != nil { - buffer.Release() - return nil, err - } - // There is a potential buffer overflow here. Large buffer is 64K bytes, - // while uin16 + 10 will be more than that - length := serial.BytesToUint16(buffer.BytesTo(2)) + AuthSize - if length > buf.Size { - // Theoretically the size of a chunk is 64K, but most Shadowsocks implementations used <4K buffer. - buffer.Release() - buffer = buf.NewSize(uint32(length) + 128) + size, err := serial.ReadUint16(v.reader) + if err != nil { + return nil, newError("failed to read size") } + size += AuthSize - buffer.Clear() - if err := buffer.AppendSupplier(buf.ReadFullFrom(v.reader, int(length))); err != nil { + buffer := buf.NewSize(uint32(size)) + if err := buffer.AppendSupplier(buf.ReadFullFrom(v.reader, int(size))); err != nil { buffer.Release() return nil, err }