Skip to content

Commit fa5329f

Browse files
Craig Petersonelithrar
authored andcommitted
[bugfix] Fix NopDecoder
* Fixes #41
1 parent c13558c commit fa5329f

File tree

2 files changed

+31
-4
lines changed

2 files changed

+31
-4
lines changed

securecookie.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,7 @@ var (
102102
errTimestampExpired = cookieError{typ: decodeError, msg: "expired timestamp"}
103103
errDecryptionFailed = cookieError{typ: decodeError, msg: "the value could not be decrypted"}
104104
errValueNotByte = cookieError{typ: decodeError, msg: "value not a []byte."}
105+
errValueNotBytePtr = cookieError{typ: decodeError, msg: "value not a pointer to []byte."}
105106

106107
// ErrMacInvalid indicates that cookie decoding failed because the HMAC
107108
// could not be extracted and verified. Direct use of this error
@@ -474,12 +475,11 @@ func (e NopEncoder) Serialize(src interface{}) ([]byte, error) {
474475

475476
// Deserialize passes a []byte through as-is.
476477
func (e NopEncoder) Deserialize(src []byte, dst interface{}) error {
477-
if _, ok := dst.([]byte); ok {
478-
dst = src
478+
if dat, ok := dst.(*[]byte); ok {
479+
*dat = src
479480
return nil
480481
}
481-
482-
return errValueNotByte
482+
return errValueNotBytePtr
483483
}
484484

485485
// Encoding -------------------------------------------------------------------

securecookie_test.go

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,33 @@ func TestJSONSerialization(t *testing.T) {
193193
}
194194
}
195195

196+
func TestNopSerialization(t *testing.T) {
197+
cookieData := "fooobar123"
198+
sz := NopEncoder{}
199+
200+
if _, err := sz.Serialize(cookieData); err != errValueNotByte {
201+
t.Fatal("Expected error passing string")
202+
}
203+
dat, err := sz.Serialize([]byte(cookieData))
204+
if err != nil {
205+
t.Fatal(err)
206+
}
207+
if (string(dat)) != cookieData {
208+
t.Fatal("Expected serialized data to be same as source")
209+
}
210+
211+
var dst []byte
212+
if err = sz.Deserialize(dat, dst); err != errValueNotBytePtr {
213+
t.Fatal("Expect error unless you pass a *[]byte")
214+
}
215+
if err = sz.Deserialize(dat, &dst); err != nil {
216+
t.Fatal(err)
217+
}
218+
if (string(dst)) != cookieData {
219+
t.Fatal("Expected deserialized data to be same as source")
220+
}
221+
}
222+
196223
func TestEncoding(t *testing.T) {
197224
for _, value := range testStrings {
198225
encoded := encode([]byte(value))

0 commit comments

Comments
 (0)