]> Cypherpunks repositories - gostls13.git/commitdiff
archive/zip: only consider UncompressedSize when checking dirs
authorRoland Shoemaker <roland@golang.org>
Tue, 6 Dec 2022 19:58:10 +0000 (11:58 -0800)
committerGopher Robot <gobot@golang.org>
Tue, 6 Dec 2022 20:19:47 +0000 (20:19 +0000)
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 <roland@golang.org>
Reviewed-by: Julie Qiu <julieqiu@google.com>
Auto-Submit: Roland Shoemaker <roland@golang.org>
TryBot-Result: Gopher Robot <gobot@golang.org>

src/archive/zip/reader.go
src/archive/zip/reader_test.go

index 449fc73c0fb281e59dc2d0236047701978e86ca0..10e835fe86059972fb6b9bd5df43c1f383a525d3 100644 (file)
@@ -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
index 94cf5479fca6321d4e23134b1d25ad0e44d1fda3..1594b2648ef2d87eb343681f34e38a36d1017d92 100644 (file)
@@ -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)
+               }
        }
 }