Skip to content

Commit 95c125a

Browse files
amitsahaneild
authored andcommitted
net/http: allow zero-valued Expires in Cookie.Valid
The value of Expires is only checked when a value is set. This fixes the bug that a cookie with a zero-valued Expire was considered invalid, even though Expires is an optional field. Fixes #52989 Change-Id: I206c50e9b6ea2744a92c74673d589ce2aaa62670 Reviewed-on: https://go-review.googlesource.com/c/go/+/407654 Run-TryBot: Damien Neil <[email protected]> Reviewed-by: Damien Neil <[email protected]> Reviewed-by: Ian Lance Taylor <[email protected]> TryBot-Result: Gopher Robot <[email protected]>
1 parent 05ff045 commit 95c125a

File tree

2 files changed

+6
-3
lines changed

2 files changed

+6
-3
lines changed

src/net/http/cookie.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -247,7 +247,7 @@ func (c *Cookie) Valid() error {
247247
if !isCookieNameValid(c.Name) {
248248
return errors.New("http: invalid Cookie.Name")
249249
}
250-
if !validCookieExpires(c.Expires) {
250+
if !c.Expires.IsZero() && !validCookieExpires(c.Expires) {
251251
return errors.New("http: invalid Cookie.Expires")
252252
}
253253
for i := 0; i < len(c.Value); i++ {

src/net/http/cookie_test.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -542,11 +542,14 @@ func TestCookieValid(t *testing.T) {
542542
}{
543543
{nil, false},
544544
{&Cookie{Name: ""}, false},
545-
{&Cookie{Name: "invalid-expires"}, false},
546545
{&Cookie{Name: "invalid-value", Value: "foo\"bar"}, false},
547546
{&Cookie{Name: "invalid-path", Path: "/foo;bar/"}, false},
548547
{&Cookie{Name: "invalid-domain", Domain: "example.com:80"}, false},
549-
{&Cookie{Name: "valid", Value: "foo", Path: "/bar", Domain: "example.com", Expires: time.Unix(0, 0)}, true},
548+
{&Cookie{Name: "invalid-expiry", Value: "", Expires: time.Date(1600, 1, 1, 1, 1, 1, 1, time.UTC)}, false},
549+
{&Cookie{Name: "valid-empty"}, true},
550+
{&Cookie{Name: "valid-expires", Value: "foo", Path: "/bar", Domain: "example.com", Expires: time.Unix(0, 0)}, true},
551+
{&Cookie{Name: "valid-max-age", Value: "foo", Path: "/bar", Domain: "example.com", MaxAge: 60}, true},
552+
{&Cookie{Name: "valid-all-fields", Value: "foo", Path: "/bar", Domain: "example.com", Expires: time.Unix(0, 0), MaxAge: 0}, true},
550553
}
551554

552555
for _, tt := range tests {

0 commit comments

Comments
 (0)