From ee3d414ed5d7d0eae713ca2672c89eacb981eb9e Mon Sep 17 00:00:00 2001 From: Andrey Smirnov Date: Mon, 30 Mar 2015 23:59:00 +0300 Subject: [PATCH] Don't use shared encodeBuffer, not safe for API mode. --- deb/package_collection.go | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/deb/package_collection.go b/deb/package_collection.go index 10050788..db8ce8f0 100644 --- a/deb/package_collection.go +++ b/deb/package_collection.go @@ -10,9 +10,8 @@ import ( // PackageCollection does management of packages in DB type PackageCollection struct { - db database.Storage - encodeBuffer bytes.Buffer - codecHandle *codec.MsgpackHandle + db database.Storage + codecHandle *codec.MsgpackHandle } // Verify interface @@ -163,43 +162,45 @@ func (collection *PackageCollection) loadFiles(p *Package) *PackageFiles { // Update adds or updates information about package in DB checking for conficts first func (collection *PackageCollection) Update(p *Package) error { - encoder := codec.NewEncoder(&collection.encodeBuffer, collection.codecHandle) + var encodeBuffer bytes.Buffer - collection.encodeBuffer.Reset() - collection.encodeBuffer.WriteByte(0xc1) - collection.encodeBuffer.WriteByte(0x1) + encoder := codec.NewEncoder(&encodeBuffer, collection.codecHandle) + + encodeBuffer.Reset() + encodeBuffer.WriteByte(0xc1) + encodeBuffer.WriteByte(0x1) err := encoder.Encode(p) if err != nil { return err } - err = collection.db.Put(p.Key(""), collection.encodeBuffer.Bytes()) + err = collection.db.Put(p.Key(""), encodeBuffer.Bytes()) if err != nil { return err } // Encode offloaded fields one by one if p.files != nil { - collection.encodeBuffer.Reset() + encodeBuffer.Reset() err = encoder.Encode(*p.files) if err != nil { return err } - err = collection.db.Put(p.Key("xF"), collection.encodeBuffer.Bytes()) + err = collection.db.Put(p.Key("xF"), encodeBuffer.Bytes()) if err != nil { return err } } if p.deps != nil { - collection.encodeBuffer.Reset() + encodeBuffer.Reset() err = encoder.Encode(*p.deps) if err != nil { return err } - err = collection.db.Put(p.Key("xD"), collection.encodeBuffer.Bytes()) + err = collection.db.Put(p.Key("xD"), encodeBuffer.Bytes()) if err != nil { return err } @@ -208,13 +209,13 @@ func (collection *PackageCollection) Update(p *Package) error { } if p.extra != nil { - collection.encodeBuffer.Reset() + encodeBuffer.Reset() err = encoder.Encode(*p.extra) if err != nil { return err } - err = collection.db.Put(p.Key("xE"), collection.encodeBuffer.Bytes()) + err = collection.db.Put(p.Key("xE"), encodeBuffer.Bytes()) if err != nil { return err }