forked from quic-go/quic-go
read unsupported version numbers in version negotiation packets
This commit is contained in:
@@ -43,15 +43,8 @@ func IsSupportedVersion(supported []VersionNumber, v VersionNumber) bool {
|
|||||||
// the versions in other do not need to be ordered
|
// the versions in other do not need to be ordered
|
||||||
// it returns true and the version number, if there is one, otherwise false
|
// it returns true and the version number, if there is one, otherwise false
|
||||||
func HighestSupportedVersion(other []VersionNumber) (bool, VersionNumber) {
|
func HighestSupportedVersion(other []VersionNumber) (bool, VersionNumber) {
|
||||||
var otherSupported []VersionNumber
|
|
||||||
for _, ver := range other {
|
|
||||||
if ver != VersionUnsupported {
|
|
||||||
otherSupported = append(otherSupported, ver)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, v := range SupportedVersions {
|
for _, v := range SupportedVersions {
|
||||||
for _, ver := range otherSupported {
|
for _, ver := range other {
|
||||||
if ver == v {
|
if ver == v {
|
||||||
return true, ver
|
return true, ver
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -196,9 +196,6 @@ func ParsePublicHeader(b *bytes.Reader, packetSentBy protocol.Perspective) (*Pub
|
|||||||
break
|
break
|
||||||
}
|
}
|
||||||
v := protocol.VersionTagToNumber(versionTag)
|
v := protocol.VersionTagToNumber(versionTag)
|
||||||
if !protocol.IsSupportedVersion(protocol.SupportedVersions, v) {
|
|
||||||
v = protocol.VersionUnsupported
|
|
||||||
}
|
|
||||||
header.SupportedVersions = append(header.SupportedVersions, v)
|
header.SupportedVersions = append(header.SupportedVersions, v)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -111,16 +111,16 @@ var _ = Describe("Public Header", func() {
|
|||||||
Expect(b.Len()).To(BeZero())
|
Expect(b.Len()).To(BeZero())
|
||||||
})
|
})
|
||||||
|
|
||||||
It("sets version numbers to unsupported, if we don't support them", func() {
|
It("reads version negotiation packets containing unsupported versions", func() {
|
||||||
data := []byte{0x9, 0xf6, 0x19, 0x86, 0x66, 0x9b, 0x9f, 0xfa, 0x4c}
|
data := []byte{0x9, 0xf6, 0x19, 0x86, 0x66, 0x9b, 0x9f, 0xfa, 0x4c}
|
||||||
data = appendVersion(data, 1) // unsupported version
|
data = appendVersion(data, 1) // unsupported version
|
||||||
data = appendVersion(data, protocol.SupportedVersions[0])
|
data = appendVersion(data, protocol.SupportedVersions[0])
|
||||||
data = appendVersion(data, 1337) // unsupported version
|
data = appendVersion(data, 99) // unsupported version
|
||||||
b := bytes.NewReader(data)
|
b := bytes.NewReader(data)
|
||||||
hdr, err := ParsePublicHeader(b, protocol.PerspectiveServer)
|
hdr, err := ParsePublicHeader(b, protocol.PerspectiveServer)
|
||||||
Expect(err).ToNot(HaveOccurred())
|
Expect(err).ToNot(HaveOccurred())
|
||||||
Expect(hdr.VersionFlag).To(BeTrue())
|
Expect(hdr.VersionFlag).To(BeTrue())
|
||||||
Expect(hdr.SupportedVersions).To(Equal([]protocol.VersionNumber{protocol.VersionUnsupported, protocol.SupportedVersions[0], protocol.VersionUnsupported}))
|
Expect(hdr.SupportedVersions).To(Equal([]protocol.VersionNumber{1, protocol.SupportedVersions[0], 99}))
|
||||||
Expect(b.Len()).To(BeZero())
|
Expect(b.Len()).To(BeZero())
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user