From 484c0ba7b4b6bae69ad186d52862600f98474737 Mon Sep 17 00:00:00 2001 From: Marten Seemann Date: Tue, 24 Dec 2024 13:16:32 +0800 Subject: [PATCH] wire: don't allocate an empty data slice for empty STREAM frames (#4794) Minor optimization, but it simplifies testing in some cases. --- internal/wire/stream_frame.go | 7 +++++-- internal/wire/stream_frame_test.go | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/internal/wire/stream_frame.go b/internal/wire/stream_frame.go index f9470ecd6..cdc32722f 100644 --- a/internal/wire/stream_frame.go +++ b/internal/wire/stream_frame.go @@ -58,7 +58,10 @@ func parseStreamFrame(b []byte, typ uint64, _ protocol.Version) (*StreamFrame, i var frame *StreamFrame if dataLen < protocol.MinStreamFrameBufferSize { - frame = &StreamFrame{Data: make([]byte, dataLen)} + frame = &StreamFrame{} + if dataLen > 0 { + frame.Data = make([]byte, dataLen) + } } else { frame = GetStreamFrame() // The STREAM frame can't be larger than the StreamFrame we obtained from the buffer, @@ -74,7 +77,7 @@ func parseStreamFrame(b []byte, typ uint64, _ protocol.Version) (*StreamFrame, i frame.Fin = fin frame.DataLenPresent = hasDataLen - if dataLen != 0 { + if dataLen > 0 { copy(frame.Data, b) } if frame.Offset+frame.DataLen() > protocol.MaxByteCount { diff --git a/internal/wire/stream_frame_test.go b/internal/wire/stream_frame_test.go index 986e78937..b61775712 100644 --- a/internal/wire/stream_frame_test.go +++ b/internal/wire/stream_frame_test.go @@ -55,7 +55,7 @@ func TestParseStreamFrameAllowsEmpty(t *testing.T) { require.NoError(t, err) require.Equal(t, protocol.StreamID(0x1337), f.StreamID) require.Equal(t, protocol.ByteCount(0x12345), f.Offset) - require.Empty(t, f.Data) + require.Nil(t, f.Data) require.False(t, f.Fin) require.Equal(t, len(data), l) }