diff options
-rw-r--r-- | file.go | 10 | ||||
-rw-r--r-- | file_test.go | 9 |
2 files changed, 18 insertions, 1 deletions
@@ -196,6 +196,14 @@ func (f *File) writeToZip(zw *zip.Writer) error { _, err = fi.Write(content.([]byte)) return true }) - + f.tempFiles.Range(func(path, content interface{}) bool { + var fi io.Writer + fi, err = zw.Create(path.(string)) + if err != nil { + return false + } + _, err = fi.Write(f.readBytes(path.(string))) + return true + }) return err } diff --git a/file_test.go b/file_test.go index ee5d322..8e65c5d 100644 --- a/file_test.go +++ b/file_test.go @@ -62,6 +62,15 @@ func TestWriteTo(t *testing.T) { _, err := f.WriteTo(bufio.NewWriter(&buf)) assert.Nil(t, err) } + // Test write with temporary file + { + f, buf := File{tempFiles: sync.Map{}}, bytes.Buffer{} + const maxUint16 = 1<<16 - 1 + f.tempFiles.Store("s", "") + f.tempFiles.Store(strings.Repeat("s", maxUint16+1), "") + _, err := f.WriteTo(bufio.NewWriter(&buf)) + assert.EqualError(t, err, "zip: FileHeader.Name too long") + } } func TestClose(t *testing.T) { |