Skip to content

Commit cba9c73

Browse files
committed
handle compressed tarballs correctly
1 parent 5ade18f commit cba9c73

File tree

2 files changed

+53
-67
lines changed

2 files changed

+53
-67
lines changed

Gopkg.lock

Lines changed: 30 additions & 65 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

cmd/docker-socket-firewall/main.go

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,20 @@ package main
22

33
import (
44
"archive/tar"
5+
"bufio"
56
"bytes"
7+
"compress/bzip2"
8+
"compress/gzip"
69
"context"
710
"flag"
811
"github.com/docker/go-connections/sockets"
12+
"github.com/h2non/filetype"
913
"github.com/linead/docker-socket-firewall/pkg/opa"
1014
"github.com/pkg/errors"
15+
"github.com/xi2/xz"
1116
log "github.com/sirupsen/logrus"
1217
"golang.org/x/net/context/ctxhttp"
18+
"gopkg.in/h2non/filetype.v1/matchers"
1319
"io"
1420
"io/ioutil"
1521
"net"
@@ -205,9 +211,24 @@ func verifyBuildInstruction(req *http.Request) (bool, error) {
205211
return false, err
206212
}
207213

208-
b1, b2 := ioutil.NopCloser(&buf), ioutil.NopCloser(bytes.NewReader(buf.Bytes()))
214+
b1, b2 := bufio.NewReader(&buf), ioutil.NopCloser(bytes.NewReader(buf.Bytes()))
209215

210-
tr := tar.NewReader(b1)
216+
head, _ := b1.Peek(262)
217+
218+
var tr *tar.Reader
219+
220+
if(filetype.IsType(head, matchers.TypeGz)) {
221+
gzip_reader, _ := gzip.NewReader(b1)
222+
tr = tar.NewReader(gzip_reader)
223+
} else if(filetype.IsType(head, matchers.TypeBz2)) {
224+
bz2_reader := bzip2.NewReader(b1)
225+
tr = tar.NewReader(bz2_reader)
226+
} else if(filetype.IsType(head, matchers.TypeXz)) {
227+
xz_reader, _ := xz.NewReader(b1, 0)
228+
tr = tar.NewReader(xz_reader)
229+
} else if(filetype.IsType(head, matchers.TypeTar)) {
230+
tr = tar.NewReader(b1)
231+
}
211232

212233
dockerfileLoc := req.URL.Query().Get("dockerfile")
213234

0 commit comments

Comments
 (0)