check for PacketNumberLen when writing the PublicHeader packet number

This commit is contained in:
Marten Seemann
2016-11-07 10:42:56 +07:00
parent cc2d966d84
commit db8eb257c6
2 changed files with 26 additions and 6 deletions

View File

@@ -89,6 +89,10 @@ func (h *PublicHeader) Write(b *bytes.Buffer, version protocol.VersionNumber, pe
return nil
}
if h.PacketNumberLen != protocol.PacketNumberLen1 && h.PacketNumberLen != protocol.PacketNumberLen2 && h.PacketNumberLen != protocol.PacketNumberLen4 && h.PacketNumberLen != protocol.PacketNumberLen6 {
return errPacketNumberLenNotSet
}
switch h.PacketNumberLen {
case protocol.PacketNumberLen1:
b.WriteByte(uint8(h.PacketNumber))

View File

@@ -94,7 +94,8 @@ var _ = Describe("Public Header", func() {
PacketNumber: 2,
PacketNumberLen: protocol.PacketNumberLen6,
}
hdr.Write(b, protocol.Version35, protocol.PerspectiveServer)
err := hdr.Write(b, protocol.Version35, protocol.PerspectiveServer)
Expect(err).ToNot(HaveOccurred())
Expect(b.Bytes()).To(Equal([]byte{0x38, 0xf6, 0x19, 0x86, 0x66, 0x9b, 0x9f, 0xfa, 0x4c, 2, 0, 0, 0, 0, 0}))
})
@@ -105,10 +106,21 @@ var _ = Describe("Public Header", func() {
PacketNumber: 0x1337,
PacketNumberLen: protocol.PacketNumberLen6,
}
hdr.Write(b, protocol.Version35, protocol.PerspectiveClient)
err := hdr.Write(b, protocol.Version35, protocol.PerspectiveClient)
Expect(err).ToNot(HaveOccurred())
Expect(b.Bytes()).To(Equal([]byte{0x38, 0xf6, 0x19, 0x86, 0x66, 0x9b, 0x9f, 0xfa, 0x4c, 0x37, 0x13, 0, 0, 0, 0}))
})
It("refuses to write a Public Header if the PacketNumberLen is not set", func() {
hdr := PublicHeader{
ConnectionID: 1,
PacketNumber: 2,
}
b := &bytes.Buffer{}
err := hdr.Write(b, protocol.VersionWhatever, protocol.PerspectiveServer)
Expect(err).To(MatchError(errPacketNumberLenNotSet))
})
It("truncates the connection ID", func() {
b := &bytes.Buffer{}
hdr := PublicHeader{
@@ -173,7 +185,8 @@ var _ = Describe("Public Header", func() {
PacketNumber: 2,
PacketNumberLen: protocol.PacketNumberLen6,
}
hdr.Write(b, protocol.VersionWhatever, protocol.PerspectiveServer)
err := hdr.Write(b, protocol.VersionWhatever, protocol.PerspectiveServer)
Expect(err).ToNot(HaveOccurred())
// must be the first assertion
Expect(b.Len()).To(Equal(1 + 8)) // 1 FlagByte + 8 ConnectionID
firstByte, _ := b.ReadByte()
@@ -190,7 +203,8 @@ var _ = Describe("Public Header", func() {
PacketNumber: 0x1337,
PacketNumberLen: protocol.PacketNumberLen6,
}
hdr.Write(b, protocol.VersionWhatever, protocol.PerspectiveClient)
err := hdr.Write(b, protocol.VersionWhatever, protocol.PerspectiveClient)
Expect(err).ToNot(HaveOccurred())
// must be the first assertion
Expect(b.Len()).To(Equal(1 + 8 + 4 + 6)) // 1 FlagByte + 8 ConnectionID + 4 version number + 6 PacketNumber
firstByte, _ := b.ReadByte()
@@ -210,7 +224,8 @@ var _ = Describe("Public Header", func() {
PacketNumber: 2,
PacketNumberLen: protocol.PacketNumberLen6,
}
hdr.Write(b, protocol.VersionWhatever, protocol.PerspectiveServer)
err := hdr.Write(b, protocol.VersionWhatever, protocol.PerspectiveServer)
Expect(err).ToNot(HaveOccurred())
// must be the first assertion
Expect(b.Len()).To(Equal(1 + 8)) // 1 FlagByte + 8 ConnectionID
firstByte, _ := b.ReadByte()
@@ -225,7 +240,8 @@ var _ = Describe("Public Header", func() {
PacketNumber: 2,
PacketNumberLen: protocol.PacketNumberLen6,
}
hdr.Write(b, protocol.VersionWhatever, protocol.PerspectiveClient)
err := hdr.Write(b, protocol.VersionWhatever, protocol.PerspectiveClient)
Expect(err).ToNot(HaveOccurred())
// must be the first assertion
Expect(b.Len()).To(Equal(1 + 8)) // 1 FlagByte + 8 ConnectionID
})