summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorxuri <xuri.me@gmail.com>2021-12-01 00:10:31 +0800
committerxuri <xuri.me@gmail.com>2021-12-01 00:10:31 +0800
commitbb0eb4a42be2c004a3c2ce59a8c748a9822b5f99 (patch)
tree6c16befeca4b645e4fb87376e921dbcbd44b4c0d
parent49c9ea40d7cf7c20e9b94723c84780f4d048f4a4 (diff)
This closes #1075, reload temporary files into memory on save
-rw-r--r--file.go10
-rw-r--r--file_test.go9
2 files changed, 18 insertions, 1 deletions
diff --git a/file.go b/file.go
index c0092a2..a430c5f 100644
--- a/file.go
+++ b/file.go
@@ -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) {