From 160db13bdb4a5e08c4b54dcb2bebf7fb0f0ad527 Mon Sep 17 00:00:00 2001 From: Marten Seemann Date: Wed, 27 Apr 2016 11:34:35 +0700 Subject: [PATCH] close the connection on an MapAccess error in SentPacketHandler --- ackhandler/sent_packet_handler.go | 9 +++++---- session.go | 2 ++ 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/ackhandler/sent_packet_handler.go b/ackhandler/sent_packet_handler.go index 58ede8f8c..55b481fc7 100644 --- a/ackhandler/sent_packet_handler.go +++ b/ackhandler/sent_packet_handler.go @@ -12,11 +12,12 @@ var ( ErrDuplicateOrOutOfOrderAck = errors.New("SentPacketHandler: Duplicate or out-of-order ACK") // ErrEntropy occurs when an ACK with incorrect entropy is received ErrEntropy = errors.New("SentPacketHandler: Wrong entropy") + // ErrMapAccess occurs when a NACK contains invalid NACK ranges + ErrMapAccess = errors.New("SentPacketHandler: Packet does not exist in PacketHistory") ) var ( errAckForUnsentPacket = errors.New("SentPacketHandler: Received ACK for an unsent package") - errMapAccess = errors.New("SentPacketHandler: Packet does not exist in PacketHistory") retransmissionThreshold = uint8(3) ) @@ -46,7 +47,7 @@ func (h *sentPacketHandler) ackPacket(packetNumber protocol.PacketNumber) { func (h *sentPacketHandler) nackPacket(packetNumber protocol.PacketNumber) error { packet, ok := h.packetHistory[packetNumber] if !ok { - return errMapAccess + return ErrMapAccess } packet.MissingReports++ @@ -92,7 +93,7 @@ func (h *sentPacketHandler) SentPacket(packet *Packet) error { func (h *sentPacketHandler) calculateExpectedEntropy(ackFrame *frames.AckFrame) (EntropyAccumulator, error) { packet, ok := h.packetHistory[ackFrame.LargestObserved] if !ok { - return 0, errMapAccess + return 0, ErrMapAccess } expectedEntropy := packet.Entropy @@ -109,7 +110,7 @@ func (h *sentPacketHandler) calculateExpectedEntropy(ackFrame *frames.AckFrame) if i >= nackRange.FirstPacketNumber && i <= nackRange.LastPacketNumber { packet, ok := h.packetHistory[i] if !ok { - return 0, errMapAccess + return 0, ErrMapAccess } expectedEntropy.Substract(i, packet.EntropyBit) } diff --git a/session.go b/session.go index a9a6d72e2..bb810cd39 100644 --- a/session.go +++ b/session.go @@ -91,6 +91,8 @@ func (s *Session) Run() { // Can happen e.g. when packets thought missing arrive late case ackhandler.ErrDuplicateOrOutOfOrderAck: // Can happen when RST_STREAMs arrive early or late (?) + case ackhandler.ErrMapAccess: + s.Close(err) // TODO: sent correct error code here case errRstStreamOnInvalidStream: fmt.Printf("Ignoring error in session: %s\n", err.Error()) default: