From d1ed507a5a624811ce873c6361471e1019243f26 Mon Sep 17 00:00:00 2001 From: Aaron Jacobs Date: Mon, 19 Dec 2016 13:01:45 +1100 Subject: [PATCH] OutMessage.GrowNoZero --- internal/buffer/out_message.go | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/internal/buffer/out_message.go b/internal/buffer/out_message.go index 02e1bf6..49a43ca 100644 --- a/internal/buffer/out_message.go +++ b/internal/buffer/out_message.go @@ -81,7 +81,18 @@ func (m *OutMessage) Grow(n int) (p unsafe.Pointer) // GrowNoZero is equivalent to Grow, except the new segment is not zeroed. Use // with caution! -func (m *OutMessage) GrowNoZero(n int) (p unsafe.Pointer) +func (m *OutMessage) GrowNoZero(n int) (p unsafe.Pointer) { + // Will we overflow the buffer? + o := m.payloadOffset + if len(m.payload)-o < n { + return + } + + p = unsafe.Pointer(uintptr(unsafe.Pointer(&m.payload)) + uintptr(o)) + m.payloadOffset = o + n + + return +} // ShrinkTo shrinks m to the given size. It panics if the size is greater than // Len() or less than OutMessageHeaderSize.