Merge "Strip zip64 extras after writing local header when copying" into main
This commit is contained in:
@@ -471,6 +471,56 @@ func TestZip2Zip(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TestZip2Zip64 tests that zip2zip on zip file larger than 4GB produces a valid zip file.
|
||||||
|
func TestZip2Zip64(t *testing.T) {
|
||||||
|
if testing.Short() {
|
||||||
|
t.Skip("skipping slow test in short mode")
|
||||||
|
}
|
||||||
|
inputBuf := &bytes.Buffer{}
|
||||||
|
outputBuf := &bytes.Buffer{}
|
||||||
|
|
||||||
|
inputWriter := zip.NewWriter(inputBuf)
|
||||||
|
w, err := inputWriter.CreateHeaderAndroid(&zip.FileHeader{
|
||||||
|
Name: "a",
|
||||||
|
Method: zip.Store,
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
buf := make([]byte, 4*1024*1024)
|
||||||
|
for i := 0; i < 1025; i++ {
|
||||||
|
w.Write(buf)
|
||||||
|
}
|
||||||
|
w, err = inputWriter.CreateHeaderAndroid(&zip.FileHeader{
|
||||||
|
Name: "b",
|
||||||
|
Method: zip.Store,
|
||||||
|
})
|
||||||
|
for i := 0; i < 1025; i++ {
|
||||||
|
w.Write(buf)
|
||||||
|
}
|
||||||
|
inputWriter.Close()
|
||||||
|
inputBytes := inputBuf.Bytes()
|
||||||
|
|
||||||
|
inputReader, err := zip.NewReader(bytes.NewReader(inputBytes), int64(len(inputBytes)))
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
outputWriter := zip.NewWriter(outputBuf)
|
||||||
|
err = zip2zip(inputReader, outputWriter, false, false, false,
|
||||||
|
nil, nil, nil, nil)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
outputWriter.Close()
|
||||||
|
outputBytes := outputBuf.Bytes()
|
||||||
|
_, err = zip.NewReader(bytes.NewReader(outputBytes), int64(len(outputBytes)))
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestConstantPartOfPattern(t *testing.T) {
|
func TestConstantPartOfPattern(t *testing.T) {
|
||||||
testCases := []struct{ in, out string }{
|
testCases := []struct{ in, out string }{
|
||||||
{
|
{
|
||||||
|
5
third_party/zip/android.go
vendored
5
third_party/zip/android.go
vendored
@@ -56,6 +56,11 @@ func (w *Writer) CopyFrom(orig *File, newName string) error {
|
|||||||
if err := writeHeader(w.cw, fh); err != nil {
|
if err := writeHeader(w.cw, fh); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Strip the extras again in case writeHeader added the local file header extras that are incorrect for the
|
||||||
|
// central directory.
|
||||||
|
fh.Extra = stripExtras(fh.Extra)
|
||||||
|
|
||||||
dataOffset, err := orig.DataOffset()
|
dataOffset, err := orig.DataOffset()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
Reference in New Issue
Block a user