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
|
||||
// it returns true and the version number, if there is one, otherwise false
|
||||
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 _, ver := range otherSupported {
|
||||
for _, ver := range other {
|
||||
if ver == v {
|
||||
return true, ver
|
||||
}
|
||||
|
||||
@@ -196,9 +196,6 @@ func ParsePublicHeader(b *bytes.Reader, packetSentBy protocol.Perspective) (*Pub
|
||||
break
|
||||
}
|
||||
v := protocol.VersionTagToNumber(versionTag)
|
||||
if !protocol.IsSupportedVersion(protocol.SupportedVersions, v) {
|
||||
v = protocol.VersionUnsupported
|
||||
}
|
||||
header.SupportedVersions = append(header.SupportedVersions, v)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -111,16 +111,16 @@ var _ = Describe("Public Header", func() {
|
||||
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 = appendVersion(data, 1) // unsupported version
|
||||
data = appendVersion(data, protocol.SupportedVersions[0])
|
||||
data = appendVersion(data, 1337) // unsupported version
|
||||
data = appendVersion(data, 99) // unsupported version
|
||||
b := bytes.NewReader(data)
|
||||
hdr, err := ParsePublicHeader(b, protocol.PerspectiveServer)
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
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())
|
||||
})
|
||||
|
||||
|
||||
Reference in New Issue
Block a user