aboutsummaryrefslogtreecommitdiff
path: root/src/archive
diff options
context:
space:
mode:
authorMauri de Souza Meneguzzo <mauri870@gmail.com>2023-09-07 21:34:01 +0000
committerGopher Robot <gobot@golang.org>2023-09-15 19:04:06 +0000
commit52fc777dcc342c000ac71d4da19047a2e02c27cb (patch)
tree328ffa02772edcbd73650aaec9fc450168a70437 /src/archive
parent6192f4615514a7673fb2318ce3491e162d74d438 (diff)
downloadgo-52fc777dcc342c000ac71d4da19047a2e02c27cb.tar.xz
archive/zip: reject non-regular files in AddFS
When a filesystem with non-regular files is used the resulting files inside the zip archive are empty. In this case we can be explicit and return an error. Fixes #61875 Change-Id: I1aeac544521002e0c4bad328e73f51852ad4eee3 GitHub-Last-Rev: 5e53dcfd7c12e45d4142016d0b9b286f9aa83d56 GitHub-Pull-Request: golang/go#61876 Reviewed-on: https://go-review.googlesource.com/c/go/+/517475 Auto-Submit: Ian Lance Taylor <iant@golang.org> Run-TryBot: Mauri de Souza Meneguzzo <mauri870@gmail.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Bryan Mills <bcmills@google.com> Reviewed-by: David Chase <drchase@google.com>
Diffstat (limited to 'src/archive')
-rw-r--r--src/archive/zip/writer.go3
-rw-r--r--src/archive/zip/writer_test.go23
2 files changed, 26 insertions, 0 deletions
diff --git a/src/archive/zip/writer.go b/src/archive/zip/writer.go
index 3da5ad612b..5dd6096fc5 100644
--- a/src/archive/zip/writer.go
+++ b/src/archive/zip/writer.go
@@ -504,6 +504,9 @@ func (w *Writer) AddFS(fsys fs.FS) error {
if err != nil {
return err
}
+ if !info.Mode().IsRegular() {
+ return errors.New("zip: cannot add non-regular file")
+ }
h, err := FileInfoHeader(info)
if err != nil {
return err
diff --git a/src/archive/zip/writer_test.go b/src/archive/zip/writer_test.go
index 5250bc112e..bd33a07c3c 100644
--- a/src/archive/zip/writer_test.go
+++ b/src/archive/zip/writer_test.go
@@ -648,3 +648,26 @@ func TestWriterAddFS(t *testing.T) {
testReadFile(t, r.File[i], &wt)
}
}
+
+func TestIssue61875(t *testing.T) {
+ buf := new(bytes.Buffer)
+ w := NewWriter(buf)
+ tests := []WriteTest{
+ {
+ Name: "symlink",
+ Data: []byte("../link/target"),
+ Method: Deflate,
+ Mode: 0755 | fs.ModeSymlink,
+ },
+ {
+ Name: "device",
+ Data: []byte(""),
+ Method: Deflate,
+ Mode: 0755 | fs.ModeDevice,
+ },
+ }
+ err := w.AddFS(writeTestsToFS(tests))
+ if err == nil {
+ t.Errorf("expected error, got nil")
+ }
+}