From 7b8ff0111416a269d0a3a64018ef56bc91610cb7 Mon Sep 17 00:00:00 2001 From: RPRX <63339210+RPRX@users.noreply.github.com> Date: Mon, 9 Jan 2023 08:51:51 +0000 Subject: [PATCH] Make sure that 0 <= b.start <= b.end Fixes https://github.com/XTLS/Xray-core/issues/1501 --- common/buf/buffer.go | 15 +++++++++++++++ 1 file changed, 15 insertions(+) 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.