From 48b5b35b2bd46ecd043f95d5f470da71046af760 Mon Sep 17 00:00:00 2001 From: Adin Scannell Date: Wed, 8 Aug 2018 22:22:40 -0700 Subject: Fix error handling for bad message sizes. The message size check is legitimate: the size must be negotiated, which relies on the fixed message limit up front. Sending a message larger than that indicates that the connection is out of sync and is considered a socket error (disconnect). Similarly, sending a size that is too small indicates that the stream is out-of-sync or invalid. PiperOrigin-RevId: 207996551 Change-Id: Icd8b513d5307e9d5953dbb957ee70ceea111098d --- pkg/p9/transport.go | 4 ++-- pkg/p9/transport_test.go | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/pkg/p9/transport.go b/pkg/p9/transport.go index c42b41fcf..b5df29961 100644 --- a/pkg/p9/transport.go +++ b/pkg/p9/transport.go @@ -206,11 +206,11 @@ func recv(s *unet.Socket, msize uint32, lookup lookupTagAndType) (Tag, message, // The message is too small. // // See above: it's probably screwed. - return NoTag, nil, ErrNoValidMessage + return NoTag, nil, ErrSocket{ErrNoValidMessage} } if size > maximumLength || size > msize { // The message is too big. - return NoTag, nil, &ErrMessageTooLarge{size, msize} + return NoTag, nil, ErrSocket{&ErrMessageTooLarge{size, msize}} } remaining := size - headerLength diff --git a/pkg/p9/transport_test.go b/pkg/p9/transport_test.go index e3ee3e9bd..d6d4b6365 100644 --- a/pkg/p9/transport_test.go +++ b/pkg/p9/transport_test.go @@ -73,8 +73,8 @@ func TestRecvOverrun(t *testing.T) { t.Fatalf("send got err %v expected nil", err) } - if _, _, err := recv(server, maximumLength, messageByType); err != ErrNoValidMessage { - t.Fatalf("recv got err %v expected ErrNoValidMessage", err) + if _, _, err := recv(server, maximumLength, messageByType); err == nil { + t.Fatalf("recv got err %v expected ErrSocket{ErrNoValidMessage}", err) } } -- cgit v1.2.3