From 236d4bd461ed086e433e76f11f8af331578701b2 Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Thu, 5 Nov 2015 12:54:10 +0200 Subject: [PATCH] Added Cookie.ParseBytes to be consistent with Args --- cookie.go | 11 ++++++++++- cookie_test.go | 2 +- cookie_timing_test.go | 6 +++--- header.go | 4 ++-- header_test.go | 2 +- 5 files changed, 17 insertions(+), 8 deletions(-) diff --git a/cookie.go b/cookie.go index e202628..16643f4 100644 --- a/cookie.go +++ b/cookie.go @@ -36,6 +36,7 @@ type Cookie struct { Path []byte bufKV argsKV + buf []byte } var zeroTime time.Time @@ -77,7 +78,15 @@ func (c *Cookie) AppendBytes(dst []byte) []byte { var errNoCookies = errors.New("no cookies found") // Parse parses Set-Cookie header. -func (c *Cookie) Parse(src []byte) error { +func (c *Cookie) Parse(src string) error { + c.buf = AppendBytesStr(c.buf[:0], src) + return c.ParseBytes(c.buf) +} + +// ParseBytes parses Set-Cookie header. +// +// It is safe modifying src buffer after function return. +func (c *Cookie) ParseBytes(src []byte) error { c.Clear() var s cookieScanner diff --git a/cookie_test.go b/cookie_test.go index 3ec6c52..473fae7 100644 --- a/cookie_test.go +++ b/cookie_test.go @@ -16,7 +16,7 @@ func TestCookieParse(t *testing.T) { func testCookieParse(t *testing.T, s, expectedS string) { var c Cookie - if err := c.Parse([]byte(s)); err != nil { + if err := c.Parse(s); err != nil { t.Fatalf("unexpected error: %s", err) } result := string(c.AppendBytes(nil)) diff --git a/cookie_timing_test.go b/cookie_timing_test.go index 6b9dc7c..bcf958c 100644 --- a/cookie_timing_test.go +++ b/cookie_timing_test.go @@ -8,7 +8,7 @@ func BenchmarkCookieParseMin(b *testing.B) { var c Cookie s := []byte("xxx=yyy") for i := 0; i < b.N; i++ { - if err := c.Parse(s); err != nil { + if err := c.ParseBytes(s); err != nil { b.Fatalf("unexpected error when parsing cookies: %s", err) } } @@ -18,7 +18,7 @@ func BenchmarkCookieParseNoExpires(b *testing.B) { var c Cookie s := []byte("xxx=yyy; domain=foobar.com; path=/a/b") for i := 0; i < b.N; i++ { - if err := c.Parse(s); err != nil { + if err := c.ParseBytes(s); err != nil { b.Fatalf("unexpected error when parsing cookies: %s", err) } } @@ -28,7 +28,7 @@ func BenchmarkCookieParseFull(b *testing.B) { var c Cookie s := []byte("xxx=yyy; expires=Tue, 10 Nov 2009 23:00:00 GMT; domain=foobar.com; path=/a/b") for i := 0; i < b.N; i++ { - if err := c.Parse(s); err != nil { + if err := c.ParseBytes(s); err != nil { b.Fatalf("unexpected error when parsing cookies: %s", err) } } diff --git a/header.go b/header.go index dfc02a7..8abb389 100644 --- a/header.go +++ b/header.go @@ -142,7 +142,7 @@ func (h *ResponseHeader) VisitAll(f func(key, value []byte)) { // // Cookie name is passed in key and the whole Set-Cookie header value // is passed in value on each f invocation. Value may be parsed -// with Cookie.Parse(). +// with Cookie.ParseBytes(). // // f must not retain references to key and/or value after returning. func (h *ResponseHeader) VisitAllCookie(f func(key, value []byte)) { @@ -458,7 +458,7 @@ func (h *ResponseHeader) GetCookie(cookie *Cookie) bool { if v == nil { return false } - cookie.Parse(v) + cookie.ParseBytes(v) return true } diff --git a/header_test.go b/header_test.go index 1d3d49c..3c3cfd2 100644 --- a/header_test.go +++ b/header_test.go @@ -50,7 +50,7 @@ func TestResponseHeaderCookie(t *testing.T) { h.VisitAllCookie(func(key, value []byte) { var cc Cookie - cc.Parse(value) + cc.ParseBytes(value) if !bytes.Equal(key, cc.Key) { t.Fatalf("Unexpected cookie key %q. Expected %q", key, cc.Key) }