Browse Source

Fix bug on compression detection when chunck < 10bytes

Guillaume J. Charmes 12 years ago
parent
commit
02c291d13b
1 changed files with 5 additions and 5 deletions
  1. 5 5
      archive.go

+ 5 - 5
archive.go

@@ -1,7 +1,7 @@
 package docker
 
 import (
-	"bytes"
+	"bufio"
 	"errors"
 	"fmt"
 	"github.com/dotcloud/docker/utils"
@@ -85,17 +85,17 @@ func Tar(path string, compression Compression) (io.Reader, error) {
 
 func Untar(archive io.Reader, path string) error {
 
-	buf := make([]byte, 10)
-	if _, err := archive.Read(buf); err != nil {
+	bufferedArchive := bufio.NewReaderSize(archive, 10)
+	buf, err := bufferedArchive.Peek(10)
+	if err != nil {
 		return err
 	}
 	compression := DetectCompression(buf)
-	archive = io.MultiReader(bytes.NewReader(buf), archive)
 
 	utils.Debugf("Archive compression detected: %s", compression.Extension())
 
 	cmd := exec.Command("tar", "-f", "-", "-C", path, "-x"+compression.Flag())
-	cmd.Stdin = archive
+	cmd.Stdin = bufferedArchive
 	// Hardcode locale environment for predictable outcome regardless of host configuration.
 	//   (see https://github.com/dotcloud/docker/issues/355)
 	cmd.Env = []string{"LANG=en_US.utf-8", "LC_ALL=en_US.utf-8"}