websocket: fix bug involving spaces in header keys

R=rsc, ukai
CC=golang-dev
https://golang.org/cl/1669056
This commit is contained in:
Bill Neubauer 2010-07-30 12:27:03 -07:00 committed by Russ Cox
parent 1c4d380b80
commit 6d37724c15
2 changed files with 24 additions and 8 deletions

View file

@ -123,14 +123,7 @@ func generateKeyNumber() (key string, number uint32) {
// to U+0039 DIGIT NINE (9).
key = fmt.Sprintf("%d", product)
// 21. Insert /spaces_n/ U+0020 SPACE characters into /key_n/ at random
// posisions.
for i := 0; i < spaces; i++ {
pos := rand.Intn(len(key)-1) + 1
key = key[0:pos] + " " + key[pos:]
}
// 22. Insert between one and twelve random characters from the ranges
// 21. Insert between one and twelve random characters from the ranges
// U+0021 to U+002F and U+003A to U+007E into /key_n/ at random
// positions.
n := rand.Intn(12) + 1
@ -139,6 +132,14 @@ func generateKeyNumber() (key string, number uint32) {
ch := secKeyRandomChars[rand.Intn(len(secKeyRandomChars))]
key = key[0:pos] + string(ch) + key[pos:]
}
// 22. Insert /spaces_n/ U+0020 SPACE characters into /key_n/ at random
// positions other than the start or end of the string.
for i := 0; i < spaces; i++ {
pos := rand.Intn(len(key)-1) + 1
key = key[0:pos] + " " + key[pos:]
}
return
}

View file

@ -143,3 +143,18 @@ func TestHTTPDraft75(t *testing.T) {
t.Errorf("Get: got status %d", r.StatusCode)
}
}
func TestTrailingSpaces(t *testing.T) {
// http://code.google.com/p/go/issues/detail?id=955
// The last runs of this create keys with trailing spaces that should not be
// generated by the client.
once.Do(startServer)
for i := 0; i < 30; i++ {
// body
_, err := Dial(fmt.Sprintf("ws://%s/echo", serverAddr), "",
"http://localhost/")
if err != nil {
panic("Dial failed: " + err.String())
}
}
}