mirror of https://github.com/v2ray/v2ray-core
fix buffer leak in multi buffer
parent
d1e7e7002f
commit
ccf1fb6616
|
@ -4,6 +4,7 @@ import (
|
||||||
"io"
|
"io"
|
||||||
"net"
|
"net"
|
||||||
|
|
||||||
|
"v2ray.com/core/common"
|
||||||
"v2ray.com/core/common/errors"
|
"v2ray.com/core/common/errors"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -34,13 +35,14 @@ func ReadAllToMultiBuffer(reader io.Reader) (MultiBuffer, error) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ReadAllToBytes reads all content from the reader into a byte array, until EOF.
|
||||||
func ReadAllToBytes(reader io.Reader) ([]byte, error) {
|
func ReadAllToBytes(reader io.Reader) ([]byte, error) {
|
||||||
mb, err := ReadAllToMultiBuffer(reader)
|
mb, err := ReadAllToMultiBuffer(reader)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
b := make([]byte, mb.Len())
|
b := make([]byte, mb.Len())
|
||||||
mb.Read(b)
|
common.Must2(mb.Read(b))
|
||||||
mb.Release()
|
mb.Release()
|
||||||
return b, nil
|
return b, nil
|
||||||
}
|
}
|
||||||
|
@ -131,11 +133,12 @@ func (mb MultiBuffer) IsEmpty() bool {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Release releases all Buffers in the MultiBuffer.
|
// Release releases all Buffers in the MultiBuffer.
|
||||||
func (mb MultiBuffer) Release() {
|
func (mb *MultiBuffer) Release() {
|
||||||
for i, b := range mb {
|
for i, b := range *mb {
|
||||||
b.Release()
|
b.Release()
|
||||||
mb[i] = nil
|
(*mb)[i] = nil
|
||||||
}
|
}
|
||||||
|
*mb = (*mb)[:0]
|
||||||
}
|
}
|
||||||
|
|
||||||
// ToNetBuffers converts this MultiBuffer to net.Buffers. The return net.Buffers points to the same content of the MultiBuffer.
|
// ToNetBuffers converts this MultiBuffer to net.Buffers. The return net.Buffers points to the same content of the MultiBuffer.
|
||||||
|
@ -158,6 +161,7 @@ func (mb *MultiBuffer) SliceBySize(size int) MultiBuffer {
|
||||||
}
|
}
|
||||||
sliceSize += b.Len()
|
sliceSize += b.Len()
|
||||||
slice.Append(b)
|
slice.Append(b)
|
||||||
|
(*mb)[i] = nil
|
||||||
}
|
}
|
||||||
*mb = (*mb)[endIndex:]
|
*mb = (*mb)[endIndex:]
|
||||||
return slice
|
return slice
|
||||||
|
@ -168,6 +172,7 @@ func (mb *MultiBuffer) SplitFirst() *Buffer {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
b := (*mb)[0]
|
b := (*mb)[0]
|
||||||
|
(*mb)[0] = nil
|
||||||
*mb = (*mb)[1:]
|
*mb = (*mb)[1:]
|
||||||
return b
|
return b
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue