]> Cypherpunks.ru repositories - gostls13.git/commitdiff
archive/zip: reject non-regular files in AddFS
authorMauri de Souza Meneguzzo <mauri870@gmail.com>
Thu, 7 Sep 2023 21:34:01 +0000 (21:34 +0000)
committerGopher Robot <gobot@golang.org>
Fri, 15 Sep 2023 19:04:06 +0000 (19:04 +0000)
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>
src/archive/zip/writer.go
src/archive/zip/writer_test.go

index 3da5ad612b8c44fa9ac9147d94342412ed2cbf91..5dd6096fc5ccf85ce18ed9de27b27acab2453f90 100644 (file)
@@ -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
index 5250bc112ee0e4c7c0c4183363bfeed2e9bace1a..bd33a07c3c1b791603b03ead96da2644d5657db2 100644 (file)
@@ -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")
+       }
+}