forked from quic-go/quic-go
handle the packet length before parsing the extended header
This commit is contained in:
@@ -30,7 +30,7 @@ func (h *ExtendedHeader) parse(b *bytes.Reader, v protocol.VersionNumber) (*Exte
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if _, err := b.Seek(int64(h.len)-1, io.SeekCurrent); err != nil {
|
||||
if _, err := b.Seek(int64(h.ParsedLen())-1, io.SeekCurrent); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if h.IsLongHeader {
|
||||
|
||||
@@ -24,8 +24,8 @@ type Header struct {
|
||||
SupportedVersions []protocol.VersionNumber // sent in a Version Negotiation Packet
|
||||
OrigDestConnectionID protocol.ConnectionID // sent in the Retry packet
|
||||
|
||||
typeByte byte
|
||||
len int // how many bytes were read while parsing this header
|
||||
typeByte byte
|
||||
parsedLen protocol.ByteCount // how many bytes were read while parsing this header
|
||||
}
|
||||
|
||||
// ParseHeader parses the header.
|
||||
@@ -39,7 +39,7 @@ func ParseHeader(b *bytes.Reader, shortHeaderConnIDLen int) (*Header, error) {
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
h.len = startLen - b.Len()
|
||||
h.parsedLen = protocol.ByteCount(startLen - b.Len())
|
||||
return h, nil
|
||||
}
|
||||
|
||||
@@ -171,6 +171,11 @@ func (h *Header) IsVersionNegotiation() bool {
|
||||
return h.IsLongHeader && h.Version == 0
|
||||
}
|
||||
|
||||
// ParsedLen returns the number of bytes that were consumed when parsing the header
|
||||
func (h *Header) ParsedLen() protocol.ByteCount {
|
||||
return h.parsedLen
|
||||
}
|
||||
|
||||
// ParseExtended parses the version dependent part of the header.
|
||||
// The Reader has to be set such that it points to the first byte of the header.
|
||||
func (h *Header) ParseExtended(b *bytes.Reader, ver protocol.VersionNumber) (*ExtendedHeader, error) {
|
||||
|
||||
@@ -74,6 +74,7 @@ var _ = Describe("Header Parsing", func() {
|
||||
data = append(data, encodeVarInt(6)...) // token length
|
||||
data = append(data, []byte("foobar")...) // token
|
||||
data = append(data, encodeVarInt(0x1337)...) // length
|
||||
hdrLen := len(data)
|
||||
data = append(data, []byte{0, 0, 0xbe, 0xef}...)
|
||||
|
||||
hdr, err := ParseHeader(bytes.NewReader(data), 0)
|
||||
@@ -92,6 +93,7 @@ var _ = Describe("Header Parsing", func() {
|
||||
Expect(extHdr.PacketNumber).To(Equal(protocol.PacketNumber(0xbeef)))
|
||||
Expect(extHdr.PacketNumberLen).To(Equal(protocol.PacketNumberLen4))
|
||||
Expect(b.Len()).To(BeZero())
|
||||
Expect(hdr.ParsedLen()).To(BeEquivalentTo(hdrLen))
|
||||
})
|
||||
|
||||
It("errors if 0x40 is not set", func() {
|
||||
|
||||
Reference in New Issue
Block a user