From 5167e5cd64b2d4710dd8a20d2a599674d5d94861 Mon Sep 17 00:00:00 2001 From: Roland Shoemaker Date: Tue, 6 Dec 2022 11:58:10 -0800 Subject: [PATCH] archive/zip: only consider UncompressedSize when checking dirs CL 454475 switched from checking CompressedSize to UncompressedSize when determining if we should consider an archive malformed because it contains data and added a test for an example of this (a JAR). We should also remove the hasDataDescriptor check, since that is basically an alias for CompressedSize > 0. The test didn't catch this because we didn't actually attempt to read from the returned reader. Change-Id: Ibc4c1aa9c3a733f3ebf4a956d1e2f8f4900a29cd Reviewed-on: https://go-review.googlesource.com/c/go/+/455523 Run-TryBot: Roland Shoemaker Reviewed-by: Julie Qiu Auto-Submit: Roland Shoemaker TryBot-Result: Gopher Robot --- src/archive/zip/reader.go | 2 +- src/archive/zip/reader_test.go | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/archive/zip/reader.go b/src/archive/zip/reader.go index 449fc73c0f..10e835fe86 100644 --- a/src/archive/zip/reader.go +++ b/src/archive/zip/reader.go @@ -237,7 +237,7 @@ func (f *File) Open() (io.ReadCloser, error) { // 0. We still want to fail when a directory has associated uncompressed // data, but we are tolerant of cases where the uncompressed size is // zero but compressed size is not. - if f.UncompressedSize64 != 0 || f.hasDataDescriptor() { + if f.UncompressedSize64 != 0 { return &dirReader{ErrFormat}, nil } else { return &dirReader{io.EOF}, nil diff --git a/src/archive/zip/reader_test.go b/src/archive/zip/reader_test.go index 94cf5479fc..1594b2648e 100644 --- a/src/archive/zip/reader_test.go +++ b/src/archive/zip/reader_test.go @@ -1702,9 +1702,12 @@ func TestCompressedDirectory(t *testing.T) { t.Fatalf("unexpected error: %v", err) } for _, f := range r.File { - _, err = f.Open() + r, err := f.Open() if err != nil { t.Fatalf("unexpected error: %v", err) } + if _, err := io.Copy(io.Discard, r); err != nil { + t.Fatalf("unexpected error: %v", err) + } } } -- 2.50.0