Merge pull request #64 from chihaya/fix-blank-query-param-panic

Fix panic occurring when blank query params are present
This commit is contained in:
Justin Li 2015-06-18 18:00:40 -04:00
commit 8502867d94
2 changed files with 15 additions and 9 deletions

View file

@ -36,16 +36,15 @@ func New(query string) (*Query, error) {
for i, length := 0, len(query); i < length; i++ {
separator := query[i] == '&' || query[i] == ';' || query[i] == '?'
if separator || i == length-1 {
if onKey {
last := i == length-1
if separator || last {
if onKey && !last {
keyStart = i + 1
continue
}
if i == length-1 && !separator {
if query[i] == '=' {
continue
}
if last && !separator && !onKey {
valEnd = i
}
@ -54,9 +53,13 @@ func New(query string) (*Query, error) {
return nil, err
}
valStr, err := url.QueryUnescape(query[valStart : valEnd+1])
if err != nil {
return nil, err
var valStr string
if valEnd > 0 {
valStr, err = url.QueryUnescape(query[valStart : valEnd+1])
if err != nil {
return nil, err
}
}
q.Params[strings.ToLower(keyStr)] = valStr
@ -74,12 +77,14 @@ func New(query string) (*Query, error) {
}
}
valEnd = 0
onKey = true
keyStart = i + 1
} else if query[i] == '=' {
onKey = false
valStart = i + 1
valEnd = 0
} else if onKey {
keyEnd = i
} else {

View file

@ -26,6 +26,7 @@ var (
url.Values{"info_hash": {testInfoHash}, "peer_id": {testPeerID}, "port": {"6881"}, "downloaded": {"1234"}, "left": {"4321"}, "compact": {"0"}, "no_peer_id": {"1"}, "key": {"peerKey"}, "trackerid": {"trackerId"}},
url.Values{"info_hash": {testInfoHash}, "peer_id": {"%3Ckey%3A+0x90%3E"}, "port": {"6881"}, "downloaded": {"1234"}, "left": {"4321"}, "compact": {"0"}, "no_peer_id": {"1"}, "key": {"peerKey"}, "trackerid": {"trackerId"}},
url.Values{"info_hash": {testInfoHash}, "peer_id": {"%3Ckey%3A+0x90%3E"}, "compact": {"1"}},
url.Values{"info_hash": {""}, "peer_id": {""}, "compact": {""}},
}
InvalidQueries = []string{