diff options
| author | Mauri de Souza Meneguzzo <mauri870@gmail.com> | 2023-09-07 21:34:01 +0000 |
|---|---|---|
| committer | Gopher Robot <gobot@golang.org> | 2023-09-15 19:04:06 +0000 |
| commit | 52fc777dcc342c000ac71d4da19047a2e02c27cb (patch) | |
| tree | 328ffa02772edcbd73650aaec9fc450168a70437 /src/archive | |
| parent | 6192f4615514a7673fb2318ce3491e162d74d438 (diff) | |
| download | go-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.go | 3 | ||||
| -rw-r--r-- | src/archive/zip/writer_test.go | 23 |
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") + } +} |
