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

View File

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

View File

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