aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--securecookie.go8
-rw-r--r--securecookie_test.go27
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))