From d1d53beaa83234499c859815c4166404d8f49f78 Mon Sep 17 00:00:00 2001 From: Lucas Clemente Date: Tue, 23 Aug 2016 12:11:10 +0200 Subject: [PATCH] only update last packet number after decryption in session --- session.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/session.go b/session.go index b2f473c7..471fe417 100644 --- a/session.go +++ b/session.go @@ -242,7 +242,6 @@ func (s *Session) handlePacketImpl(remoteAddr interface{}, hdr *PublicHeader, da s.lastRcvdPacketNumber, hdr.PacketNumber, ) - s.lastRcvdPacketNumber = hdr.PacketNumber if utils.Debug() { utils.Debugf("<- Reading packet 0x%x (%d bytes) for connection %x", hdr.PacketNumber, len(data)+len(hdr.Raw), hdr.ConnectionID) } @@ -255,6 +254,9 @@ func (s *Session) handlePacketImpl(remoteAddr interface{}, hdr *PublicHeader, da return err } + // Only do this after decrypting, so we are sure the packet is not attacker-controlled + s.lastRcvdPacketNumber = hdr.PacketNumber + err = s.receivedPacketHandler.ReceivedPacket(hdr.PacketNumber, packet.entropyBit) // ignore duplicate packets if err == ackhandlerlegacy.ErrDuplicatePacket || err == ackhandler.ErrDuplicatePacket {