Skip to content

Commit 56691ee

Browse files
neildgopherbot
authored andcommitted
quic: don't return EOF from ReadByte when we have a byte
Change-Id: I3be7c43fa6ceeb75582f648ee56025991eda9611 Reviewed-on: https://go-review.googlesource.com/c/net/+/642515 LUCI-TryBot-Result: Go LUCI <[email protected]> Reviewed-by: Jonathan Amsterdam <[email protected]> Reviewed-by: Brad Fitzpatrick <[email protected]> Auto-Submit: Damien Neil <[email protected]>
1 parent 7ad0ebf commit 56691ee

File tree

2 files changed

+20
-1
lines changed

2 files changed

+20
-1
lines changed

quic/stream.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -315,7 +315,7 @@ func (s *Stream) ReadByte() (byte, error) {
315315
var b [1]byte
316316
n, err := s.Read(b[:])
317317
if n > 0 {
318-
return b[0], err
318+
return b[0], nil
319319
}
320320
return 0, err
321321
}

quic/stream_test.go

+19
Original file line numberDiff line numberDiff line change
@@ -568,6 +568,25 @@ func TestStreamReceiveEmptyEOF(t *testing.T) {
568568
})
569569
}
570570

571+
func TestStreamReadByteFromOneByteStream(t *testing.T) {
572+
// ReadByte on the only byte of a stream should not return an error.
573+
testStreamTypes(t, "", func(t *testing.T, styp streamType) {
574+
tc, s := newTestConnAndRemoteStream(t, serverSide, styp, permissiveTransportParameters)
575+
want := byte(1)
576+
tc.writeFrames(packetType1RTT, debugFrameStream{
577+
id: s.id,
578+
data: []byte{want},
579+
fin: true,
580+
})
581+
if got, err := s.ReadByte(); got != want || err != nil {
582+
t.Fatalf("s.ReadByte() = %v, %v; want %v, nil", got, err, want)
583+
}
584+
if got, err := s.ReadByte(); err != io.EOF {
585+
t.Fatalf("s.ReadByte() = %v, %v; want _, EOF", got, err)
586+
}
587+
})
588+
}
589+
571590
func finalSizeTest(t *testing.T, wantErr transportError, f func(tc *testConn, sid streamID) (finalSize int64), opts ...any) {
572591
testStreamTypes(t, "", func(t *testing.T, styp streamType) {
573592
for _, test := range []struct {

0 commit comments

Comments
 (0)