From 52fc777dcc342c000ac71d4da19047a2e02c27cb Mon Sep 17 00:00:00 2001 From: Mauri de Souza Meneguzzo Date: Thu, 7 Sep 2023 21:34:01 +0000 Subject: [PATCH] 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 Run-TryBot: Mauri de Souza Meneguzzo TryBot-Result: Gopher Robot Reviewed-by: Bryan Mills Reviewed-by: David Chase --- src/archive/zip/writer.go | 3 +++ src/archive/zip/writer_test.go | 23 +++++++++++++++++++++++ 2 files changed, 26 insertions(+) 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") + } +} -- 2.50.0