mirror of https://github.com/v2ray/v2ray-core
simplify NewSize calls
parent
0c213ccd20
commit
1cbfeea0cd
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue