mirror of
https://github.com/golang/go
synced 2024-09-15 22:20:06 +00:00
net/http: return ErrNoCookie from Request.Cookie when name is ""
Request.Cookie(name string) will return the first cookie when cookie name is "". Since readCookies in file net/http/cookie.go at line 247 return all cookies when second parameter is a empty string. To fix it, Return ErrNoCookie from Request.Cookie(""), instead of the first cookie in the request. Fixes #53181 Change-Id: Ie623ca4c53da64ef7623a7863292a2d771f76832 GitHub-Last-Rev: 1a6903fe037b43abb6208e8f831d2e948af71737 GitHub-Pull-Request: golang/go#53183
This commit is contained in:
parent
8a56c7742d
commit
01098cd5db
|
@ -418,6 +418,9 @@ var ErrNoCookie = errors.New("http: named cookie not present")
|
|||
// If multiple cookies match the given name, only one cookie will
|
||||
// be returned.
|
||||
func (r *Request) Cookie(name string) (*Cookie, error) {
|
||||
if name == "" {
|
||||
return nil, ErrNoCookie
|
||||
}
|
||||
for _, c := range readCookies(r.Header, name) {
|
||||
return c, nil
|
||||
}
|
||||
|
|
|
@ -1177,6 +1177,47 @@ func testMultipartFile(t *testing.T, req *Request, key, expectFilename, expectCo
|
|||
return f
|
||||
}
|
||||
|
||||
// Issue 53181: verify Request.Cookie return the correct Cookie.
|
||||
// Return ErrNoCookie instead of the first cookie when name is "".
|
||||
func TestRequestCookie(t *testing.T) {
|
||||
for _, tt := range []struct {
|
||||
name string
|
||||
value string
|
||||
expectedErr error
|
||||
}{
|
||||
{
|
||||
name: "foo",
|
||||
value: "bar",
|
||||
expectedErr: nil,
|
||||
},
|
||||
{
|
||||
name: "",
|
||||
expectedErr: ErrNoCookie,
|
||||
},
|
||||
} {
|
||||
req, err := NewRequest("GET", "http://example.com/", nil)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
req.AddCookie(&Cookie{Name: tt.name, Value: tt.value})
|
||||
c, err := req.Cookie(tt.name)
|
||||
if err != tt.expectedErr {
|
||||
t.Errorf("got %v, want %v", err, tt.expectedErr)
|
||||
}
|
||||
|
||||
// skip if error occured.
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
if c.Value != tt.value {
|
||||
t.Errorf("got %v, want %v", c.Value, tt.value)
|
||||
}
|
||||
if c.Name != tt.name {
|
||||
t.Errorf("got %s, want %v", tt.name, c.Name)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const (
|
||||
fileaContents = "This is a test file."
|
||||
filebContents = "Another test file."
|
||||
|
|
Loading…
Reference in a new issue