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
 	}