From fa5329f913702981df43dcb2a380bac429c810b5 Mon Sep 17 00:00:00 2001 From: Craig Peterson Date: Sun, 2 Oct 2016 23:16:01 -0600 Subject: [bugfix] Fix NopDecoder * Fixes #41 --- securecookie.go | 8 ++++---- securecookie_test.go | 27 +++++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 4 deletions(-) diff --git a/securecookie.go b/securecookie.go index 83dd606..cd4e097 100644 --- a/securecookie.go +++ b/securecookie.go @@ -102,6 +102,7 @@ var ( errTimestampExpired = cookieError{typ: decodeError, msg: "expired timestamp"} errDecryptionFailed = cookieError{typ: decodeError, msg: "the value could not be decrypted"} errValueNotByte = cookieError{typ: decodeError, msg: "value not a []byte."} + errValueNotBytePtr = cookieError{typ: decodeError, msg: "value not a pointer to []byte."} // ErrMacInvalid indicates that cookie decoding failed because the HMAC // could not be extracted and verified. Direct use of this error @@ -474,12 +475,11 @@ func (e NopEncoder) Serialize(src interface{}) ([]byte, error) { // Deserialize passes a []byte through as-is. func (e NopEncoder) Deserialize(src []byte, dst interface{}) error { - if _, ok := dst.([]byte); ok { - dst = src + if dat, ok := dst.(*[]byte); ok { + *dat = src return nil } - - return errValueNotByte + return errValueNotBytePtr } // Encoding ------------------------------------------------------------------- diff --git a/securecookie_test.go b/securecookie_test.go index 33ce4fc..2b0f8a1 100644 --- a/securecookie_test.go +++ b/securecookie_test.go @@ -193,6 +193,33 @@ func TestJSONSerialization(t *testing.T) { } } +func TestNopSerialization(t *testing.T) { + cookieData := "fooobar123" + sz := NopEncoder{} + + if _, err := sz.Serialize(cookieData); err != errValueNotByte { + t.Fatal("Expected error passing string") + } + dat, err := sz.Serialize([]byte(cookieData)) + if err != nil { + t.Fatal(err) + } + if (string(dat)) != cookieData { + t.Fatal("Expected serialized data to be same as source") + } + + var dst []byte + if err = sz.Deserialize(dat, dst); err != errValueNotBytePtr { + t.Fatal("Expect error unless you pass a *[]byte") + } + if err = sz.Deserialize(dat, &dst); err != nil { + t.Fatal(err) + } + if (string(dst)) != cookieData { + t.Fatal("Expected deserialized data to be same as source") + } +} + func TestEncoding(t *testing.T) { for _, value := range testStrings { encoded := encode([]byte(value)) -- cgit v1.2.3