Skip to content

Commit 94223bc

Browse files
committed
fix: base64 encode gzipped data
`string(gzippedData)` does not guarantee a UTF-8 sanitized string, which may lead to corrupted data.
1 parent 0c63ed9 commit 94223bc

File tree

2 files changed

+8
-5
lines changed

2 files changed

+8
-5
lines changed

gothic/gothic.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -330,7 +330,7 @@ func GetFromSession(key string, req *http.Request) (string, error) {
330330
session, _ := Store.Get(req, SessionName)
331331
value, err := getSessionValue(session, key)
332332
if err != nil {
333-
return "", errors.New("could not find a matching session for this request")
333+
return "", err
334334
}
335335

336336
return value, nil
@@ -343,7 +343,8 @@ func getSessionValue(session *sessions.Session, key string) (string, error) {
343343
}
344344

345345
rdata := strings.NewReader(value.(string))
346-
r, err := gzip.NewReader(rdata)
346+
b64Reader := base64.NewDecoder(base64.StdEncoding, rdata)
347+
r, err := gzip.NewReader(b64Reader)
347348
if err != nil {
348349
return "", err
349350
}
@@ -368,6 +369,6 @@ func updateSessionValue(session *sessions.Session, key, value string) error {
368369
return err
369370
}
370371

371-
session.Values[key] = b.String()
372+
session.Values[key] = base64.StdEncoding.EncodeToString(b.Bytes())
372373
return nil
373374
}

gothic/gothic_test.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package gothic_test
33
import (
44
"bytes"
55
"compress/gzip"
6+
"encoding/base64"
67
"fmt"
78
"html"
89
"io/ioutil"
@@ -274,12 +275,13 @@ func gzipString(value string) string {
274275
return "err"
275276
}
276277

277-
return b.String()
278+
return base64.StdEncoding.EncodeToString(b.Bytes())
278279
}
279280

280281
func ungzipString(value string) string {
281282
rdata := strings.NewReader(value)
282-
r, err := gzip.NewReader(rdata)
283+
b64Reader := base64.NewDecoder(base64.StdEncoding, rdata)
284+
r, err := gzip.NewReader(b64Reader)
283285
if err != nil {
284286
return "err"
285287
}

0 commit comments

Comments
 (0)