Browse code

Fix bug on compression detection when chunck < 10bytes

Guillaume J. Charmes authored on 2013/06/18 10:11:58
Showing 1 changed files
... ...
@@ -1,7 +1,7 @@
1 1
 package docker
2 2
 
3 3
 import (
4
-	"bytes"
4
+	"bufio"
5 5
 	"errors"
6 6
 	"fmt"
7 7
 	"github.com/dotcloud/docker/utils"
... ...
@@ -85,17 +85,17 @@ func Tar(path string, compression Compression) (io.Reader, error) {
85 85
 
86 86
 func Untar(archive io.Reader, path string) error {
87 87
 
88
-	buf := make([]byte, 10)
89
-	if _, err := archive.Read(buf); err != nil {
88
+	bufferedArchive := bufio.NewReaderSize(archive, 10)
89
+	buf, err := bufferedArchive.Peek(10)
90
+	if err != nil {
90 91
 		return err
91 92
 	}
92 93
 	compression := DetectCompression(buf)
93
-	archive = io.MultiReader(bytes.NewReader(buf), archive)
94 94
 
95 95
 	utils.Debugf("Archive compression detected: %s", compression.Extension())
96 96
 
97 97
 	cmd := exec.Command("tar", "-f", "-", "-C", path, "-x"+compression.Flag())
98
-	cmd.Stdin = archive
98
+	cmd.Stdin = bufferedArchive
99 99
 	// Hardcode locale environment for predictable outcome regardless of host configuration.
100 100
 	//   (see https://github.com/dotcloud/docker/issues/355)
101 101
 	cmd.Env = []string{"LANG=en_US.utf-8", "LC_ALL=en_US.utf-8"}