]> Cypherpunks.ru repositories - gostls13.git/commitdiff
archive/tar, archive/zip: document ErrInsecurePath and GODEBUG setting
authorRuss Cox <rsc@golang.org>
Sat, 14 Jan 2023 19:44:21 +0000 (14:44 -0500)
committerRuss Cox <rsc@golang.org>
Tue, 17 Jan 2023 14:18:16 +0000 (14:18 +0000)
These are mentioned in the release notes but not the actual doc comments.
Nothing should exist only in release notes.

Change-Id: I8d10f25a2c9b2677231929ba3f393af9034b777b
Reviewed-on: https://go-review.googlesource.com/c/go/+/462195
Run-TryBot: Russ Cox <rsc@golang.org>
Reviewed-by: Damien Neil <dneil@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>

src/archive/tar/reader.go
src/archive/zip/reader.go

index 82a5a5a293b9157d498576703c1b29fc2e86accc..768ca1968d905039b3cae912c7808dac3af7a01a 100644 (file)
@@ -43,8 +43,14 @@ func NewReader(r io.Reader) *Reader {
 // Next advances to the next entry in the tar archive.
 // The Header.Size determines how many bytes can be read for the next file.
 // Any remaining data in the current file is automatically discarded.
+// At the end of the archive, Next returns the error io.EOF.
 //
-// io.EOF is returned at the end of the input.
+// If Next encounters a non-local name (as defined by [filepath.IsLocal])
+// and the GODEBUG environment variable contains `tarinsecurepath=0`,
+// Next returns the header with an ErrInsecurePath error.
+// A future version of Go may introduce this behavior by default.
+// Programs that want to accept non-local names can ignore
+// the ErrInsecurePath error and use the returned header.
 func (tr *Reader) Next() (*Header, error) {
        if tr.err != nil {
                return nil, tr.err
index a2ae74e541e366f6a3dd56490a0a3de2c9ed74e0..a1554d2c52aad592b6acdedd9e691685d550620e 100644 (file)
@@ -87,6 +87,14 @@ func OpenReader(name string) (*ReadCloser, error) {
 
 // NewReader returns a new Reader reading from r, which is assumed to
 // have the given size in bytes.
+//
+// If any file inside the archive uses a non-local name
+// (as defined by [filepath.IsLocal]) or a name containing backslashes
+// and the GODEBUG environment variable contains `zipinsecurepath=0`,
+// NewReader returns the reader with an ErrInsecurePath error.
+// A future version of Go may introduce this behavior by default.
+// Programs that want to accept non-local names can ignore
+// the ErrInsecurePath error and use the returned reader.
 func NewReader(r io.ReaderAt, size int64) (*Reader, error) {
        if size < 0 {
                return nil, errors.New("zip: size cannot be negative")