mitm: Fix out of bounds error when checking software version in UA

This commit is contained in:
Matthew Holt 2017-07-25 13:00:49 -06:00
parent ae7e098240
commit 10d5422c3e
No known key found for this signature in database
GPG Key ID: 2A349DD577D586A5
2 changed files with 47 additions and 0 deletions

View File

@ -112,6 +112,8 @@ func getVersion(ua, softwareName string) float64 {
end := strings.Index(ua[start:], " ") end := strings.Index(ua[start:], " ")
if end < 0 { if end < 0 {
end = len(ua) end = len(ua)
} else {
end += start
} }
strVer := strings.Replace(ua[start:end], "-", "", -1) strVer := strings.Replace(ua[start:end], "-", "", -1)
firstDot := strings.Index(strVer, ".") firstDot := strings.Index(strVer, ".")

View File

@ -352,3 +352,48 @@ func TestHeuristicFunctionsAndHandler(t *testing.T) {
} }
} }
} }
func TestGetVersion(t *testing.T) {
for i, test := range []struct {
UserAgent string
SoftwareName string
Version float64
}{
{
UserAgent: "Mozilla/5.0 (Windows NT 6.1; rv:45.0) Gecko/20100101 Firefox/45.0",
SoftwareName: "Firefox",
Version: 45.0,
},
{
UserAgent: "Mozilla/5.0 (Windows NT 6.1; rv:45.0) Gecko/20100101 Firefox/45.0 more_stuff_here",
SoftwareName: "Firefox",
Version: 45.0,
},
{
UserAgent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393",
SoftwareName: "Safari",
Version: 537.36,
},
{
UserAgent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393",
SoftwareName: "Chrome",
Version: 51.0270479,
},
{
UserAgent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393",
SoftwareName: "Mozilla",
Version: 5.0,
},
{
UserAgent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393",
SoftwareName: "curl",
Version: -1,
},
} {
actual := getVersion(test.UserAgent, test.SoftwareName)
if actual != test.Version {
t.Errorf("Test [%d]: Expected version=%f, got version=%f for %s in '%s'",
i, test.Version, actual, test.SoftwareName, test.UserAgent)
}
}
}