From 4de3f1adc18d9621b89961182eed9ccc8a3407b9 Mon Sep 17 00:00:00 2001 From: Darien Raymond Date: Mon, 2 Apr 2018 00:44:47 +0200 Subject: [PATCH] change ReadFullFrom to take int32 size --- app/proxyman/mux/reader.go | 4 ++-- common/buf/io.go | 2 +- common/buf/multi_buffer.go | 6 +++--- common/buf/reader.go | 2 +- common/crypto/auth.go | 2 +- common/protocol/address.go | 2 +- proxy/shadowsocks/ota.go | 2 +- proxy/shadowsocks/protocol.go | 6 +++--- proxy/socks/protocol.go | 6 +++--- proxy/vmess/encoding/client.go | 4 ++-- proxy/vmess/encoding/server.go | 4 ++-- 11 files changed, 20 insertions(+), 20 deletions(-) diff --git a/app/proxyman/mux/reader.go b/app/proxyman/mux/reader.go index d2513257..3443dd80 100644 --- a/app/proxyman/mux/reader.go +++ b/app/proxyman/mux/reader.go @@ -20,7 +20,7 @@ func ReadMetadata(reader io.Reader) (*FrameMetadata, error) { b := buf.NewSize(uint32(metaLen)) defer b.Release() - if err := b.Reset(buf.ReadFullFrom(reader, int(metaLen))); err != nil { + if err := b.Reset(buf.ReadFullFrom(reader, int32(metaLen))); err != nil { return nil, err } return ReadFrameFrom(b) @@ -52,7 +52,7 @@ func (r *PacketReader) ReadMultiBuffer() (buf.MultiBuffer, error) { } b := buf.NewSize(uint32(size)) - if err := b.AppendSupplier(buf.ReadFullFrom(r.reader, int(size))); err != nil { + if err := b.Reset(buf.ReadFullFrom(r.reader, int32(size))); err != nil { b.Release() return nil, err } diff --git a/common/buf/io.go b/common/buf/io.go index e3c8aa33..c3b9538b 100644 --- a/common/buf/io.go +++ b/common/buf/io.go @@ -33,7 +33,7 @@ func ReadFrom(reader io.Reader) Supplier { } // ReadFullFrom creates a Supplier to read full buffer from a given io.Reader. -func ReadFullFrom(reader io.Reader, size int) Supplier { +func ReadFullFrom(reader io.Reader, size int32) Supplier { return func(b []byte) (int, error) { return io.ReadFull(reader, b[:size]) } diff --git a/common/buf/multi_buffer.go b/common/buf/multi_buffer.go index 48cc185f..ade8630c 100644 --- a/common/buf/multi_buffer.go +++ b/common/buf/multi_buffer.go @@ -40,7 +40,7 @@ func ReadSizeToMultiBuffer(reader io.Reader, size int32) (MultiBuffer, error) { bSize = Size } b := NewSize(uint32(bSize)) - if err := b.Reset(ReadFullFrom(reader, int(bSize))); err != nil { + if err := b.Reset(ReadFullFrom(reader, bSize)); err != nil { mb.Release() return nil, err } @@ -174,12 +174,12 @@ func (mb MultiBuffer) ToNetBuffers() net.Buffers { } // SliceBySize splits the beginning of this MultiBuffer into another one, for at most size bytes. -func (mb *MultiBuffer) SliceBySize(size int) MultiBuffer { +func (mb *MultiBuffer) SliceBySize(size int32) MultiBuffer { slice := NewMultiBufferCap(10) sliceSize := 0 endIndex := len(*mb) for i, b := range *mb { - if b.Len()+sliceSize > size { + if int32(b.Len()+sliceSize) > size { endIndex = i break } diff --git a/common/buf/reader.go b/common/buf/reader.go index 0dafeec7..72d95500 100644 --- a/common/buf/reader.go +++ b/common/buf/reader.go @@ -158,7 +158,7 @@ func (r *BufferedReader) ReadAtMost(size int) (MultiBuffer, error) { r.leftOver = mb } - mb := r.leftOver.SliceBySize(size) + mb := r.leftOver.SliceBySize(int32(size)) if r.leftOver.IsEmpty() { r.leftOver = nil } diff --git a/common/crypto/auth.go b/common/crypto/auth.go index e7b3e559..7aecea41 100644 --- a/common/crypto/auth.go +++ b/common/crypto/auth.go @@ -144,7 +144,7 @@ func (r *AuthenticationReader) readInternal(soft bool) (*buf.Buffer, error) { } b := buf.NewSize(uint32(size)) - if err := b.Reset(buf.ReadFullFrom(r.reader, int(size))); err != nil { + if err := b.Reset(buf.ReadFullFrom(r.reader, size)); err != nil { b.Release() return nil, err } diff --git a/common/protocol/address.go b/common/protocol/address.go index f7d32220..9534c5b5 100644 --- a/common/protocol/address.go +++ b/common/protocol/address.go @@ -99,7 +99,7 @@ func (p *AddressParser) readAddress(b *buf.Buffer, reader io.Reader) (net.Addres return nil, err } domainLength := int(b.Byte(b.Len() - 1)) - if err := b.AppendSupplier(buf.ReadFullFrom(reader, domainLength)); err != nil { + if err := b.AppendSupplier(buf.ReadFullFrom(reader, int32(domainLength))); err != nil { return nil, err } domain := string(b.BytesFrom(-domainLength)) diff --git a/proxy/shadowsocks/ota.go b/proxy/shadowsocks/ota.go index be18be8c..e574bcb0 100644 --- a/proxy/shadowsocks/ota.go +++ b/proxy/shadowsocks/ota.go @@ -77,7 +77,7 @@ func (v *ChunkReader) ReadMultiBuffer() (buf.MultiBuffer, error) { size += AuthSize buffer := buf.NewSize(uint32(size)) - if err := buffer.AppendSupplier(buf.ReadFullFrom(v.reader, int(size))); err != nil { + if err := buffer.AppendSupplier(buf.ReadFullFrom(v.reader, int32(size))); err != nil { buffer.Release() return nil, err } diff --git a/proxy/shadowsocks/protocol.go b/proxy/shadowsocks/protocol.go index a52e310f..d6cfd31c 100644 --- a/proxy/shadowsocks/protocol.go +++ b/proxy/shadowsocks/protocol.go @@ -41,7 +41,7 @@ func ReadTCPSession(user *protocol.User, reader io.Reader) (*protocol.RequestHea ivLen := account.Cipher.IVSize() var iv []byte if ivLen > 0 { - if err := buffer.AppendSupplier(buf.ReadFullFrom(reader, ivLen)); err != nil { + if err := buffer.AppendSupplier(buf.ReadFullFrom(reader, int32(ivLen))); err != nil { return nil, nil, newError("failed to read IV").Base(err) } @@ -70,7 +70,7 @@ func ReadTCPSession(user *protocol.User, reader io.Reader) (*protocol.RequestHea // Invalid address. Continue to read some bytes to confuse client. nBytes := dice.Roll(32) + 1 buffer.Clear() - buffer.AppendSupplier(buf.ReadFullFrom(br, nBytes)) + buffer.AppendSupplier(buf.ReadFullFrom(br, int32(nBytes))) return nil, nil, newError("failed to read address").Base(err) } @@ -227,7 +227,7 @@ func EncodeUDPPacket(request *protocol.RequestHeader, payload []byte) (*buf.Buff buffer := buf.New() ivLen := account.Cipher.IVSize() if ivLen > 0 { - common.Must(buffer.Reset(buf.ReadFullFrom(rand.Reader, ivLen))) + common.Must(buffer.Reset(buf.ReadFullFrom(rand.Reader, int32(ivLen)))) } iv := buffer.Bytes() diff --git a/proxy/socks/protocol.go b/proxy/socks/protocol.go index 10c0f2d9..8715e30c 100644 --- a/proxy/socks/protocol.go +++ b/proxy/socks/protocol.go @@ -97,7 +97,7 @@ func (s *ServerSession) Handshake(reader io.Reader, writer io.Writer) (*protocol if version == socks5Version { nMethod := int(buffer.Byte(1)) - if err := buffer.AppendSupplier(buf.ReadFullFrom(reader, nMethod)); err != nil { + if err := buffer.AppendSupplier(buf.ReadFullFrom(reader, int32(nMethod))); err != nil { return nil, newError("failed to read auth methods").Base(err) } @@ -190,7 +190,7 @@ func readUsernamePassword(reader io.Reader) (string, string, error) { if err := buffer.Reset(buf.ReadFullFrom(reader, 2)); err != nil { return "", "", err } - nUsername := int(buffer.Byte(1)) + nUsername := int32(buffer.Byte(1)) if err := buffer.Reset(buf.ReadFullFrom(reader, nUsername)); err != nil { return "", "", err @@ -200,7 +200,7 @@ func readUsernamePassword(reader io.Reader) (string, string, error) { if err := buffer.Reset(buf.ReadFullFrom(reader, 1)); err != nil { return "", "", err } - nPassword := int(buffer.Byte(0)) + nPassword := int32(buffer.Byte(0)) if err := buffer.Reset(buf.ReadFullFrom(reader, nPassword)); err != nil { return "", "", err } diff --git a/proxy/vmess/encoding/client.go b/proxy/vmess/encoding/client.go index 688e0e24..c8dae88f 100644 --- a/proxy/vmess/encoding/client.go +++ b/proxy/vmess/encoding/client.go @@ -87,7 +87,7 @@ func (c *ClientSession) EncodeRequestHeader(header *protocol.RequestHeader, writ } if padingLen > 0 { - common.Must(buffer.AppendSupplier(buf.ReadFullFrom(rand.Reader, padingLen))) + common.Must(buffer.AppendSupplier(buf.ReadFullFrom(rand.Reader, int32(padingLen)))) } fnv1a := fnv.New32a() @@ -191,7 +191,7 @@ func (c *ClientSession) DecodeResponseHeader(reader io.Reader) (*protocol.Respon if buffer.Byte(2) != 0 { cmdID := buffer.Byte(2) - dataLen := int(buffer.Byte(3)) + dataLen := int32(buffer.Byte(3)) if err := buffer.Reset(buf.ReadFullFrom(c.responseReader, dataLen)); err != nil { return nil, newError("failed to read response command").Base(err) diff --git a/proxy/vmess/encoding/server.go b/proxy/vmess/encoding/server.go index 438ca460..d3f713c3 100644 --- a/proxy/vmess/encoding/server.go +++ b/proxy/vmess/encoding/server.go @@ -168,7 +168,7 @@ func (s *ServerSession) DecodeRequestHeader(reader io.Reader) (*protocol.Request if invalidRequestErr != nil { randomLen := dice.Roll(64) + 1 // Read random number of bytes for prevent detection. - buffer.AppendSupplier(buf.ReadFullFrom(decryptor, randomLen)) + buffer.AppendSupplier(buf.ReadFullFrom(decryptor, int32(randomLen))) } }() @@ -195,7 +195,7 @@ func (s *ServerSession) DecodeRequestHeader(reader io.Reader) (*protocol.Request } if padingLen > 0 { - if err := buffer.AppendSupplier(buf.ReadFullFrom(decryptor, padingLen)); err != nil { + if err := buffer.AppendSupplier(buf.ReadFullFrom(decryptor, int32(padingLen))); err != nil { return nil, newError("failed to read padding").Base(err) } }