forked from quic-go/quic-go
properly handle errors that occur while handling packets in the session
fixes #614
This commit is contained in:
@@ -265,7 +265,7 @@ runLoop:
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
s.close(err)
|
s.close(err)
|
||||||
break runLoop
|
continue
|
||||||
}
|
}
|
||||||
// This is a bit unclean, but works properly, since the packet always
|
// This is a bit unclean, but works properly, since the packet always
|
||||||
// begins with the public header and we never copy it.
|
// begins with the public header and we never copy it.
|
||||||
|
|||||||
@@ -708,6 +708,20 @@ var _ = Describe("Session", func() {
|
|||||||
Expect(sess.largestRcvdPacketNumber).To(Equal(protocol.PacketNumber(5)))
|
Expect(sess.largestRcvdPacketNumber).To(Equal(protocol.PacketNumber(5)))
|
||||||
})
|
})
|
||||||
|
|
||||||
|
It("closes when handling a packet fails", func(done Done) {
|
||||||
|
testErr := errors.New("unpack error")
|
||||||
|
hdr.PacketNumber = 5
|
||||||
|
var runErr error
|
||||||
|
go func() {
|
||||||
|
runErr = sess.run()
|
||||||
|
}()
|
||||||
|
sess.unpacker.(*mockUnpacker).unpackErr = testErr
|
||||||
|
sess.handlePacket(&receivedPacket{publicHeader: hdr})
|
||||||
|
Eventually(func() error { return runErr }).Should(MatchError(testErr))
|
||||||
|
Expect(sess.runClosed).To(BeClosed())
|
||||||
|
close(done)
|
||||||
|
})
|
||||||
|
|
||||||
It("sets the {last,largest}RcvdPacketNumber, for an out-of-order packet", func() {
|
It("sets the {last,largest}RcvdPacketNumber, for an out-of-order packet", func() {
|
||||||
hdr.PacketNumber = 5
|
hdr.PacketNumber = 5
|
||||||
err := sess.handlePacketImpl(&receivedPacket{publicHeader: hdr})
|
err := sess.handlePacketImpl(&receivedPacket{publicHeader: hdr})
|
||||||
|
|||||||
Reference in New Issue
Block a user