From bfe30892f4105946f9605063e79d318369d8d7f0 Mon Sep 17 00:00:00 2001 From: Semisol Date: Thu, 9 Jan 2025 21:09:24 +0300 Subject: [PATCH 1/2] Add a test for all-zero stream decoding See github.com/capnproto/go-capnp/issues/592 In an older version of capnp-go, decoding an all-zero stream may cause a panic when retrieving the root of the decoded message. --- message_test.go | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/message_test.go b/message_test.go index 2ff05233..a5959b08 100644 --- a/message_test.go +++ b/message_test.go @@ -622,3 +622,25 @@ func TestCanResetArenaForRead(t *testing.T) { _, err := msg.Reset(arena) require.NoError(t, err) } + +type test_zero_stream struct{} + +func (test_zero_stream) Read(b []byte) (int, error) { + for i := 0; i < len(b); i++ { + b[i] = 0 + } + return len(b), nil +} + +// TestZeroStream checks that an all-zero stream will fail to decode with an +// error, and not panic. +// See github.com/capnproto/go-capnp/issues/592 +func TestZeroStream(t *testing.T) { + m, err := NewDecoder(test_zero_stream{}).Decode() + if err != nil { + panic(err) + } + + _, err = m.Root() + assert.NotNil(t, err, "expected error decoding zero stream") +} From 8b670081dadef41ee8cacce1ffbc402814d4353b Mon Sep 17 00:00:00 2001 From: Louis Thibault <9452561+lthibault@users.noreply.github.com> Date: Fri, 10 Jan 2025 08:27:29 -0500 Subject: [PATCH 2/2] Update message_test.go Co-authored-by: Filip Petkovski --- message_test.go | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/message_test.go b/message_test.go index a5959b08..8de94eee 100644 --- a/message_test.go +++ b/message_test.go @@ -637,9 +637,7 @@ func (test_zero_stream) Read(b []byte) (int, error) { // See github.com/capnproto/go-capnp/issues/592 func TestZeroStream(t *testing.T) { m, err := NewDecoder(test_zero_stream{}).Decode() - if err != nil { - panic(err) - } + require.NoError(t, err) _, err = m.Root() assert.NotNil(t, err, "expected error decoding zero stream")