forked from quic-go/quic-go
panic if the value for WriteUint48, WriteUint40, WriteUint24 is too big
Note that it's not possible to write a couple of frame types for packet numbers that don't fit into 6 bytes. The IETF QUIC draft fixes this.
This commit is contained in:
@@ -219,7 +219,7 @@ func (f *AckFrame) Write(b *bytes.Buffer, version protocol.VersionNumber) error
|
||||
case protocol.PacketNumberLen4:
|
||||
utils.LittleEndian.WriteUint32(b, uint32(f.LargestAcked))
|
||||
case protocol.PacketNumberLen6:
|
||||
utils.LittleEndian.WriteUint48(b, uint64(f.LargestAcked))
|
||||
utils.LittleEndian.WriteUint48(b, uint64(f.LargestAcked)&(1<<48-1))
|
||||
}
|
||||
|
||||
f.DelayTime = time.Since(f.PacketReceivedTime)
|
||||
@@ -257,7 +257,7 @@ func (f *AckFrame) Write(b *bytes.Buffer, version protocol.VersionNumber) error
|
||||
case protocol.PacketNumberLen4:
|
||||
utils.LittleEndian.WriteUint32(b, uint32(firstAckBlockLength))
|
||||
case protocol.PacketNumberLen6:
|
||||
utils.LittleEndian.WriteUint48(b, uint64(firstAckBlockLength))
|
||||
utils.LittleEndian.WriteUint48(b, uint64(firstAckBlockLength)&(1<<48-1))
|
||||
}
|
||||
|
||||
for i, ackRange := range f.AckRanges {
|
||||
@@ -283,7 +283,7 @@ func (f *AckFrame) Write(b *bytes.Buffer, version protocol.VersionNumber) error
|
||||
case protocol.PacketNumberLen4:
|
||||
utils.LittleEndian.WriteUint32(b, uint32(length))
|
||||
case protocol.PacketNumberLen6:
|
||||
utils.LittleEndian.WriteUint48(b, uint64(length))
|
||||
utils.LittleEndian.WriteUint48(b, uint64(length)&(1<<48-1))
|
||||
}
|
||||
numRangesWritten++
|
||||
} else {
|
||||
@@ -308,7 +308,7 @@ func (f *AckFrame) Write(b *bytes.Buffer, version protocol.VersionNumber) error
|
||||
case protocol.PacketNumberLen4:
|
||||
utils.LittleEndian.WriteUint32(b, uint32(lengthWritten))
|
||||
case protocol.PacketNumberLen6:
|
||||
utils.LittleEndian.WriteUint48(b, lengthWritten)
|
||||
utils.LittleEndian.WriteUint48(b, lengthWritten&(1<<48-1))
|
||||
}
|
||||
|
||||
numRangesWritten++
|
||||
|
||||
@@ -46,7 +46,7 @@ func (f *StopWaitingFrame) Write(b *bytes.Buffer, version protocol.VersionNumber
|
||||
case protocol.PacketNumberLen4:
|
||||
utils.LittleEndian.WriteUint32(b, uint32(leastUnackedDelta))
|
||||
case protocol.PacketNumberLen6:
|
||||
utils.LittleEndian.WriteUint48(b, leastUnackedDelta)
|
||||
utils.LittleEndian.WriteUint48(b, leastUnackedDelta&(1<<48-1))
|
||||
default:
|
||||
return errPacketNumberLenNotSet
|
||||
}
|
||||
|
||||
@@ -95,7 +95,8 @@ var _ = Describe("StopWaitingFrame", func() {
|
||||
PacketNumber: 13,
|
||||
PacketNumberLen: protocol.PacketNumberLen1,
|
||||
}
|
||||
frame.Write(b, 0)
|
||||
err := frame.Write(b, 0)
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
Expect(b.Len()).To(Equal(2))
|
||||
Expect(b.Bytes()[1]).To(Equal(uint8(3)))
|
||||
})
|
||||
@@ -107,7 +108,8 @@ var _ = Describe("StopWaitingFrame", func() {
|
||||
PacketNumber: 0x1300,
|
||||
PacketNumberLen: protocol.PacketNumberLen2,
|
||||
}
|
||||
frame.Write(b, 0)
|
||||
err := frame.Write(b, 0)
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
Expect(b.Len()).To(Equal(3))
|
||||
Expect(b.Bytes()[1:3]).To(Equal([]byte{0xF0, 0x12}))
|
||||
})
|
||||
@@ -119,19 +121,21 @@ var _ = Describe("StopWaitingFrame", func() {
|
||||
PacketNumber: 0x12345678,
|
||||
PacketNumberLen: protocol.PacketNumberLen4,
|
||||
}
|
||||
frame.Write(b, 0)
|
||||
err := frame.Write(b, 0)
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
Expect(b.Len()).To(Equal(5))
|
||||
Expect(b.Bytes()[1:5]).To(Equal([]byte{0x78, 0x46, 0x34, 0x12}))
|
||||
})
|
||||
|
||||
It("writes a 6-byte LeastUnackedDelta", func() {
|
||||
It("writes a 6-byte LeastUnackedDelta, for a delta that fits into 6 bytes", func() {
|
||||
b := &bytes.Buffer{}
|
||||
frame := &StopWaitingFrame{
|
||||
LeastUnacked: 0x10,
|
||||
PacketNumber: 0x123456789ABC,
|
||||
PacketNumberLen: protocol.PacketNumberLen6,
|
||||
}
|
||||
frame.Write(b, 0)
|
||||
err := frame.Write(b, 0)
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
Expect(b.Len()).To(Equal(7))
|
||||
Expect(b.Bytes()[1:7]).To(Equal([]byte{0xAC, 0x9A, 0x78, 0x56, 0x34, 0x12}))
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user