http: handle possible range requests properly. (#2122)

Previously range string is not validated against various combination
of values.  This patch fixes the issue.

Fixes #2098
This commit is contained in:
Bala FA
2016-07-08 03:35:18 +05:30
committed by Harshavardhana
parent 8e53064bb4
commit 282044d454
2 changed files with 79 additions and 26 deletions
+27 -4
View File
@@ -29,8 +29,11 @@ func TestParseRequestRange(t *testing.T) {
}{
{"bytes=2-5", 2, 5, 4},
{"bytes=2-20", 2, 9, 8},
{"bytes=2-2", 2, 2, 1},
{"bytes=0000-0006", 0, 6, 7},
{"bytes=2-", 2, 9, 8},
{"bytes=-4", 6, 9, 4},
{"bytes=-20", 0, 9, 10},
}
for _, successCase := range successCases {
@@ -52,7 +55,20 @@ func TestParseRequestRange(t *testing.T) {
}
// Test invalid range strings.
invalidRangeStrings := []string{"", "2-5", "bytes= 2-5", "bytes=2 - 5", "bytes=0-0,-1", "bytes=5-2", "bytes=2-5 ", "bytes=2--5"}
invalidRangeStrings := []string{
"bytes=8",
"bytes=5-2",
"bytes=+2-5",
"bytes=2-+5",
"bytes=2--5",
"bytes=-",
"",
"2-5",
"bytes = 2-5",
"bytes=2 - 5",
"bytes=0-0,-1",
"bytes=2-5 ",
}
for _, rangeString := range invalidRangeStrings {
if _, err := parseRequestRange(rangeString, 10); err == nil {
t.Fatalf("expected: an error, got: <nil>")
@@ -60,8 +76,15 @@ func TestParseRequestRange(t *testing.T) {
}
// Test error range strings.
errorRangeString := "bytes=-0"
if _, err := parseRequestRange(errorRangeString, 10); err != errInvalidRange {
t.Fatalf("expected: %s, got: %s", errInvalidRange, err)
errorRangeString := []string{
"bytes=10-10",
"bytes=20-30",
"bytes=20-",
"bytes=-0",
}
for _, rangeString := range errorRangeString {
if _, err := parseRequestRange(rangeString, 10); err != errInvalidRange {
t.Fatalf("expected: %s, got: %s", errInvalidRange, err)
}
}
}