]> Cypherpunks repositories - gostls13.git/commitdiff
archive/zip: clarify that CreateHeader takes ownership of FileHeader
authorBrad Fitzpatrick <bradfitz@golang.org>
Wed, 10 Jun 2015 18:19:14 +0000 (11:19 -0700)
committerBrad Fitzpatrick <bradfitz@golang.org>
Wed, 10 Jun 2015 19:56:37 +0000 (19:56 +0000)
Fixes #11144

Change-Id: I1da0b72ef00a84c9b5751be0e72ad07d664bc98b
Reviewed-on: https://go-review.googlesource.com/10883
Reviewed-by: Andrew Gerrand <adg@golang.org>
Reviewed-by: Rob Pike <r@golang.org>
Reviewed-by: Dmitry Vyukov <dvyukov@google.com>
src/archive/zip/writer.go

index 87ac694a4e673b17f9ded3a8cdd28997467be30b..3be2b5fdb2f29417c0e9b384407fc56cad6bdc3e 100644 (file)
@@ -195,14 +195,20 @@ func (w *Writer) Create(name string) (io.Writer, error) {
 // CreateHeader adds a file to the zip file using the provided FileHeader
 // for the file metadata.
 // It returns a Writer to which the file contents should be written.
+//
 // The file's contents must be written to the io.Writer before the next
-// call to Create, CreateHeader, or Close.
+// call to Create, CreateHeader, or Close. The provided FileHeader fh
+// must not be modified after a call to CreateHeader.
 func (w *Writer) CreateHeader(fh *FileHeader) (io.Writer, error) {
        if w.last != nil && !w.last.closed {
                if err := w.last.close(); err != nil {
                        return nil, err
                }
        }
+       if len(w.dir) > 0 && w.dir[len(w.dir)-1].FileHeader == fh {
+               // See https://golang.org/issue/11144 confusion.
+               return nil, errors.New("archive/zip: invalid duplicate FileHeader")
+       }
 
        fh.Flags |= 0x8 // we will write a data descriptor