read unsupported version numbers in version negotiation packets

This commit is contained in:
Marten Seemann
2017-04-29 22:25:05 +07:00
parent 9db23eceed
commit 1b70bd42d9
3 changed files with 4 additions and 14 deletions

View File

@@ -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
}

View File

@@ -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)
}
}

View File

@@ -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())
})