diff --git a/archive/archive.go b/archive/archive.go index 727e9289fa..b1400c2210 100644 --- a/archive/archive.go +++ b/archive/archive.go @@ -228,6 +228,10 @@ func createTarFile(path, extractDir string, hdr *tar.Header, reader *tar.Reader) return err } + case tar.TypeXGlobalHeader: + utils.Debugf("PAX Global Extended Headers found and ignored") + return nil + default: return fmt.Errorf("Unhandled tar header type %d\n", hdr.Typeflag) } diff --git a/archive/archive_test.go b/archive/archive_test.go index a5629deff1..891f977dcf 100644 --- a/archive/archive_test.go +++ b/archive/archive_test.go @@ -1,6 +1,7 @@ package archive import ( + "archive/tar" "bytes" "fmt" "io" @@ -124,3 +125,14 @@ func TestTarUntar(t *testing.T) { } } } + +// Some tar archives such as http://haproxy.1wt.eu/download/1.5/src/devel/haproxy-1.5-dev21.tar.gz +// use PAX Global Extended Headers. +// Failing prevents the archives from being uncompressed during ADD +func TestTypeXGlobalHeaderDoesNotFail(t *testing.T) { + hdr := tar.Header{Typeflag: tar.TypeXGlobalHeader} + err := createTarFile("pax_global_header", "some_dir", &hdr, nil) + if err != nil { + t.Fatal(err) + } +}