fix packing of probe packets when retransmissions are canceled

This commit is contained in:
Marten Seemann
2020-04-17 10:06:32 +07:00
parent 16e3ddb196
commit 88337ed8c0
3 changed files with 14 additions and 2 deletions

View File

@@ -565,7 +565,7 @@ func (p *packetPacker) MaybePackProbePacket(encLevel protocol.EncryptionLevel) (
default:
panic("unknown encryption level")
}
if err != nil {
if err != nil || contents == nil {
return nil, err
}
if p.perspective == protocol.PerspectiveClient && encLevel == protocol.EncryptionInitial {

View File

@@ -1127,6 +1127,18 @@ var _ = Describe("Packet packer", func() {
Expect(packet.frames).To(HaveLen(1))
Expect(packet.frames[0].Frame).To(Equal(f))
})
It("returns nil if there's no probe data to send", func() {
sealingManager.EXPECT().Get1RTTSealer().Return(getSealer(), nil)
ackFramer.EXPECT().GetAckFrame(protocol.Encryption1RTT)
pnManager.EXPECT().PeekPacketNumber(protocol.Encryption1RTT).Return(protocol.PacketNumber(0x42), protocol.PacketNumberLen2)
expectAppendControlFrames()
expectAppendStreamFrames()
packet, err := packer.MaybePackProbePacket(protocol.Encryption1RTT)
Expect(err).ToNot(HaveOccurred())
Expect(packet).To(BeNil())
})
})
})
})

View File

@@ -1404,7 +1404,7 @@ func (s *session) sendProbePacket(encLevel protocol.EncryptionLevel) error {
return err
}
}
if packet == nil {
if packet == nil || packet.packetContents == nil {
return fmt.Errorf("session BUG: couldn't pack %s probe packet", encLevel)
}
s.sendPackedPacket(packet)