mirror of
https://github.com/v2fly/v2ray-core.git
synced 2025-01-02 15:36:41 -05:00
don't copy leftoever if at head
This commit is contained in:
parent
775b4ef542
commit
2897df5a7a
@ -128,8 +128,10 @@ func (v *AuthenticationReader) CopyChunk(b []byte) int {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (v *AuthenticationReader) EnsureChunk() error {
|
func (v *AuthenticationReader) EnsureChunk() error {
|
||||||
|
atHead := false
|
||||||
if v.buffer.IsEmpty() {
|
if v.buffer.IsEmpty() {
|
||||||
v.buffer.Clear()
|
v.buffer.Clear()
|
||||||
|
atHead = true
|
||||||
}
|
}
|
||||||
|
|
||||||
for {
|
for {
|
||||||
@ -139,7 +141,7 @@ func (v *AuthenticationReader) EnsureChunk() error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
leftover := v.buffer.Bytes()
|
leftover := v.buffer.Bytes()
|
||||||
if len(leftover) > 0 {
|
if !atHead && len(leftover) > 0 {
|
||||||
common.Must(v.buffer.Reset(func(b []byte) (int, error) {
|
common.Must(v.buffer.Reset(func(b []byte) (int, error) {
|
||||||
return copy(b, leftover), nil
|
return copy(b, leftover), nil
|
||||||
}))
|
}))
|
||||||
|
@ -91,6 +91,8 @@ func TestAuthenticationReaderWriterPartial(t *testing.T) {
|
|||||||
AdditionalDataGenerator: &NoOpBytesGenerator{},
|
AdditionalDataGenerator: &NoOpBytesGenerator{},
|
||||||
}, cache)
|
}, cache)
|
||||||
|
|
||||||
|
writer.Write([]byte{'a', 'b', 'c', 'd'})
|
||||||
|
|
||||||
nBytes, err := writer.Write(payload)
|
nBytes, err := writer.Write(payload)
|
||||||
assert.Error(err).IsNil()
|
assert.Error(err).IsNil()
|
||||||
assert.Int(nBytes).Equals(len(payload))
|
assert.Int(nBytes).Equals(len(payload))
|
||||||
@ -120,6 +122,11 @@ func TestAuthenticationReaderWriterPartial(t *testing.T) {
|
|||||||
}, pr)
|
}, pr)
|
||||||
|
|
||||||
actualPayload := make([]byte, 7*1024)
|
actualPayload := make([]byte, 7*1024)
|
||||||
|
nBytes, err = reader.Read(actualPayload)
|
||||||
|
assert.Error(err).IsNil()
|
||||||
|
assert.Int(nBytes).Equals(4)
|
||||||
|
assert.Bytes(actualPayload[:nBytes]).Equals([]byte{'a', 'b', 'c', 'd'})
|
||||||
|
|
||||||
nBytes, err = reader.Read(actualPayload)
|
nBytes, err = reader.Read(actualPayload)
|
||||||
assert.Error(err).IsNil()
|
assert.Error(err).IsNil()
|
||||||
assert.Int(nBytes).Equals(len(actualPayload))
|
assert.Int(nBytes).Equals(len(actualPayload))
|
||||||
|
Loading…
Reference in New Issue
Block a user