Просмотр исходного кода

Don't crash on reading empty index

Jakob Borg 12 лет назад
Родитель
Сommit
8589a0fb40
1 измененных файлов с 14 добавлено и 11 удалено
  1. 14 11
      protocol/messages.go

+ 14 - 11
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
 }