diff --git a/common/buf/buffer.go b/common/buf/buffer.go index 370d4a31..82795b98 100644 --- a/common/buf/buffer.go +++ b/common/buf/buffer.go @@ -160,6 +160,19 @@ func (b *Buffer) BytesTo(to int32) []byte { return b.v[b.start : b.start+to] } +// Check makes sure that 0 <= b.start <= b.end. +func (b *Buffer) Check() { + if b.start < 0 { + b.start = 0 + } + if b.end < 0 { + b.end = 0 + } + if b.start > b.end { + b.start = b.end + } +} + // Resize cuts the buffer at the given position. func (b *Buffer) Resize(from, to int32) { if from < 0 { @@ -173,6 +186,7 @@ func (b *Buffer) Resize(from, to int32) { } b.end = b.start + to b.start += from + b.Check() } // Advance cuts the buffer at the given position. @@ -181,6 +195,7 @@ func (b *Buffer) Advance(from int32) { from += b.Len() } b.start += from + b.Check() } // Len returns the length of the buffer content.