From 4fd410700d88b415f334e9e1cac64b1687ee7784 Mon Sep 17 00:00:00 2001 From: Marten Seemann Date: Sat, 13 May 2017 19:14:25 +0800 Subject: [PATCH] properly handle errors that occur while handling packets in the session fixes #614 --- session.go | 2 +- session_test.go | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/session.go b/session.go index 55dd1394f..3fbc9179c 100644 --- a/session.go +++ b/session.go @@ -265,7 +265,7 @@ runLoop: continue } s.close(err) - break runLoop + continue } // This is a bit unclean, but works properly, since the packet always // begins with the public header and we never copy it. diff --git a/session_test.go b/session_test.go index 14bd32812..7f4ec81f5 100644 --- a/session_test.go +++ b/session_test.go @@ -708,6 +708,20 @@ var _ = Describe("Session", func() { 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() { hdr.PacketNumber = 5 err := sess.handlePacketImpl(&receivedPacket{publicHeader: hdr})