Mercurial > gemma
diff auth/connection.go @ 215:f345edb409b2
Made serialisation and deserialisation of sessions more robust (fixed a small bug on the way).
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Tue, 24 Jul 2018 11:09:18 +0200 |
parents | 3d0988d9f867 |
children | 11d1a488b08f |
line wrap: on
line diff
--- a/auth/connection.go Tue Jul 24 10:58:38 2018 +0200 +++ b/auth/connection.go Tue Jul 24 11:09:18 2018 +0200 @@ -2,7 +2,6 @@ import ( "database/sql" - "encoding/binary" "errors" "io" "log" @@ -42,10 +41,13 @@ return err } access, err := c.last().MarshalText() - if err == nil { - err = binary.Write(w, binary.BigEndian, string(access)) + if err != nil { + return err } - return err + wr := binWriter{w: w} + wr.write(uint32(len(access))) + wr.write(access) + return wr.err } func (c *Connection) deserialize(r io.Reader) error { @@ -54,13 +56,18 @@ return err } - var access string - if err := binary.Read(r, binary.BigEndian, &access); err != nil { - return err + rd := binReader{r: r} + var l uint32 + rd.read(&l) + access := make([]byte, l) + rd.read(access) + + if rd.err != nil { + return rd.err } var t time.Time - if err := t.UnmarshalText([]byte(access)); err != nil { + if err := t.UnmarshalText(access); err != nil { return err }