From f71e54534ac7407ea4e275346310c87cb2687afe Mon Sep 17 00:00:00 2001 From: Marten Seemann Date: Sat, 7 Jan 2017 14:49:39 +0700 Subject: [PATCH] fix parsing of the PublicHeader of public reset packets ref #34 --- public_header.go | 26 ++++++++++++++------------ public_header_test.go | 10 ++++++++++ 2 files changed, 24 insertions(+), 12 deletions(-) diff --git a/public_header.go b/public_header.go index 684756ea5..9d5d98d06 100644 --- a/public_header.go +++ b/public_header.go @@ -138,23 +138,25 @@ func ParsePublicHeader(b io.ByteReader) (*PublicHeader, error) { return nil, errInvalidConnectionID } - // Version (optional) - if header.VersionFlag { - var versionTag uint32 - versionTag, err = utils.ReadUint32(b) + if !header.ResetFlag { + // Version (optional) + if header.VersionFlag { + var versionTag uint32 + versionTag, err = utils.ReadUint32(b) + if err != nil { + return nil, err + } + header.VersionNumber = protocol.VersionTagToNumber(versionTag) + } + + // Packet number + packetNumber, err := utils.ReadUintN(b, uint8(header.PacketNumberLen)) if err != nil { return nil, err } - header.VersionNumber = protocol.VersionTagToNumber(versionTag) + header.PacketNumber = protocol.PacketNumber(packetNumber) } - // Packet number - packetNumber, err := utils.ReadUintN(b, uint8(header.PacketNumberLen)) - if err != nil { - return nil, err - } - header.PacketNumber = protocol.PacketNumber(packetNumber) - return header, nil } diff --git a/public_header_test.go b/public_header_test.go index ef1bc5df6..309a5e57c 100644 --- a/public_header_test.go +++ b/public_header_test.go @@ -66,6 +66,16 @@ var _ = Describe("Public Header", func() { Expect(b.Len()).To(BeZero()) }) + It("parses a public reset packet", func() { + b := bytes.NewReader([]byte{0xa, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08}) + hdr, err := ParsePublicHeader(b) + Expect(err).ToNot(HaveOccurred()) + Expect(hdr.ResetFlag).To(BeTrue()) + Expect(hdr.VersionFlag).To(BeFalse()) + Expect(hdr.ConnectionID).To(Equal(protocol.ConnectionID(0x0807060504030201))) + Expect(b.Len()).To(BeZero()) + }) + PIt("rejects diversification nonces sent by the client", func() { b := bytes.NewReader([]byte{0x0c, 0xf6, 0x19, 0x86, 0x66, 0x9b, 0x9f, 0xfa, 0x4c, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1,