From 8589a0fb401d1a55166f2730d89fe16e45d70b56 Mon Sep 17 00:00:00 2001 From: Jakob Borg Date: Sun, 15 Dec 2013 13:12:32 +0100 Subject: [PATCH] Don't crash on reading empty index --- protocol/messages.go | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/protocol/messages.go b/protocol/messages.go index 591f7f4de..8a481d3b2 100644 --- a/protocol/messages.go +++ b/protocol/messages.go @@ -69,19 +69,22 @@ func (r *marshalReader) readHeader() header { } func (r *marshalReader) readIndex() []FileInfo { + var files []FileInfo nfiles := r.readUint32() - files := make([]FileInfo, nfiles) - for i := range files { - files[i].Name = r.readString() - files[i].Flags = r.readUint32() - files[i].Modified = int64(r.readUint64()) - nblocks := r.readUint32() - blocks := make([]BlockInfo, nblocks) - for j := range blocks { - blocks[j].Length = r.readUint32() - blocks[j].Hash = r.readBytes() + if nfiles > 0 { + files = make([]FileInfo, nfiles) + for i := range files { + files[i].Name = r.readString() + files[i].Flags = r.readUint32() + files[i].Modified = int64(r.readUint64()) + nblocks := r.readUint32() + blocks := make([]BlockInfo, nblocks) + for j := range blocks { + blocks[j].Length = r.readUint32() + blocks[j].Hash = r.readBytes() + } + files[i].Blocks = blocks } - files[i].Blocks = blocks } return files }