Skip to content
This repository was archived by the owner on Mar 27, 2024. It is now read-only.

Commit 7ff5120

Browse files
committed
manually detect tar compression before attempting to unpack
1 parent 3416480 commit 7ff5120

File tree

3 files changed

+19
-27
lines changed

3 files changed

+19
-27
lines changed

pkg/util/BUILD.bazel

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ go_library(
1717
deps = [
1818
"//vendor/github.com/containers/image/docker:go_default_library",
1919
"//vendor/github.com/containers/image/docker/tarfile:go_default_library",
20+
"//vendor/github.com/containers/image/pkg/compression:go_default_library",
2021
"//vendor/github.com/containers/image/types:go_default_library",
2122
"//vendor/github.com/docker/docker/client:go_default_library",
2223
"//vendor/github.com/docker/docker/pkg/system:go_default_library",

pkg/util/image_prep_utils.go

Lines changed: 17 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,14 @@ package util
1818

1919
import (
2020
"archive/tar"
21-
"compress/gzip"
2221
"encoding/json"
2322
"errors"
2423
"io/ioutil"
2524
"os"
2625
"path/filepath"
2726
"strings"
2827

28+
"github.com/containers/image/pkg/compression"
2929
"github.com/containers/image/types"
3030
"github.com/golang/glog"
3131
)
@@ -87,13 +87,23 @@ func getFileSystemFromReference(ref types.ImageReference, imageName string) (str
8787
for _, b := range img.LayerInfos() {
8888
bi, _, err := imgSrc.GetBlob(b)
8989
if err != nil {
90-
glog.Errorf("Failed to pull image layer with error: %s", err)
90+
glog.Errorf("Failed to pull image layer: %s", err)
9191
}
92-
gzf, err := gzip.NewReader(bi)
92+
// try and detect layer compression
93+
f, reader, err := compression.DetectCompression(bi)
9394
if err != nil {
94-
glog.Errorf("Failed to read layers with error: %s", err)
95+
glog.Errorf("Failed to detect image compression: %s", err)
96+
return "", err
9597
}
96-
tr := tar.NewReader(gzf)
98+
if f != nil {
99+
// decompress if necessary
100+
reader, err = f(reader)
101+
if err != nil {
102+
glog.Errorf("Failed to decompress image: %s", err)
103+
return "", err
104+
}
105+
}
106+
tr := tar.NewReader(reader)
97107
err = unpackTar(tr, path)
98108
if err != nil {
99109
glog.Errorf("Failed to untar layer with error: %s", err)
@@ -128,27 +138,8 @@ func getConfigFromReference(ref types.ImageReference, source string) (ConfigSche
128138
func CleanupImage(image Image) {
129139
if image.FSPath != "" {
130140
glog.Infof("Removing image filesystem directory %s from system", image.FSPath)
131-
errMsg := remove(image.FSPath, true)
132-
if errMsg != "" {
133-
glog.Error(errMsg)
141+
if err := os.RemoveAll(image.FSPath); err != nil {
142+
glog.Error(err.Error())
134143
}
135144
}
136145
}
137-
138-
func remove(path string, dir bool) string {
139-
var errStr string
140-
if path == "" {
141-
return ""
142-
}
143-
144-
var err error
145-
if dir {
146-
err = os.RemoveAll(path)
147-
} else {
148-
err = os.Remove(path)
149-
}
150-
if err != nil {
151-
errStr = "\nUnable to remove " + path
152-
}
153-
return errStr
154-
}

test.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ if [ ! "$(git status --porcelain)" ]; then
5353
# Check gazelle if everything is up to date.
5454
bazel run //:gazelle
5555
if [ "$(git status --porcelain)" ]; then
56-
echo "BUILD files out of date. Run `bazel run //:gazelle` to update them."
56+
echo "BUILD files out of date. Run 'bazel run //:gazelle' to update them."
5757
exit 1
5858
fi
5959
fi

0 commit comments

Comments
 (0)