Skip to content

Commit 1766663

Browse files
fix(security): fixed the possible overflow related issue
1 parent b1b3941 commit 1766663

2 files changed

Lines changed: 49 additions & 4 deletions

File tree

internal/streaming/observed_sse_stream.go

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -317,9 +317,8 @@ func joinedSuffix(prefix, data []byte, n int) []byte {
317317
}
318318

319319
needPrefix := min(n-len(data), len(prefix))
320-
321-
result := make([]byte, needPrefix+len(data))
322-
copy(result, prefix[len(prefix)-needPrefix:])
323-
copy(result[needPrefix:], data)
320+
result := make([]byte, 0, n)
321+
result = append(result, prefix[len(prefix)-needPrefix:]...)
322+
result = append(result, data...)
324323
return result
325324
}

internal/streaming/observed_sse_stream_test.go

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -289,3 +289,49 @@ func TestObservedSSEStream_ParsesCRLFBufferedEventsOnClose(t *testing.T) {
289289
t.Fatal("observer was not closed")
290290
}
291291
}
292+
293+
func TestJoinedSuffix(t *testing.T) {
294+
tests := []struct {
295+
name string
296+
prefix []byte
297+
data []byte
298+
n int
299+
want []byte
300+
}{
301+
{
302+
name: "returns nil for non-positive length",
303+
data: []byte("abc"),
304+
n: 0,
305+
want: nil,
306+
},
307+
{
308+
name: "returns suffix from data when data is long enough",
309+
data: []byte("abcdef"),
310+
n: 3,
311+
want: []byte("def"),
312+
},
313+
{
314+
name: "combines prefix tail and data",
315+
prefix: []byte("abcd"),
316+
data: []byte("ef"),
317+
n: 4,
318+
want: []byte("cdef"),
319+
},
320+
{
321+
name: "uses available prefix bytes only",
322+
prefix: []byte("ab"),
323+
data: []byte("cd"),
324+
n: 5,
325+
want: []byte("abcd"),
326+
},
327+
}
328+
329+
for _, tt := range tests {
330+
t.Run(tt.name, func(t *testing.T) {
331+
got := joinedSuffix(tt.prefix, tt.data, tt.n)
332+
if !bytes.Equal(got, tt.want) {
333+
t.Fatalf("joinedSuffix() = %q, want %q", got, tt.want)
334+
}
335+
})
336+
}
337+
}

0 commit comments

Comments
 (0)