Navigation Menu

Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

archive/zip: NewReader panics on negative size #26589

Closed
LIUHUANUCAS opened this issue Jul 25, 2018 · 8 comments
Closed

archive/zip: NewReader panics on negative size #26589

LIUHUANUCAS opened this issue Jul 25, 2018 · 8 comments
Labels
FrozenDueToAge help wanted NeedsFix The path to resolution is known, but the work has not been done.
Milestone

Comments

@LIUHUANUCAS
Copy link

Please answer these questions before submitting your issue. Thanks!

What version of Go are you using (go version)?

go version go1.7 linux/amd64

Does this issue reproduce with the latest release?

have no yet test

What operating system and processor architecture are you using (go env)?

GOARCH="amd64"
GOBIN="/usr/local/go/bin/"
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH="/usr/local/go"
GORACE=""
GOROOT="/usr/local/go"
GOTOOLDIR="/usr/local/go/pkg/tool/linux_amd64"
CC="gcc"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build197527898=/tmp/go-build -gno-record-gcc-switches"
CXX="g++"
CGO_ENABLED="1"

What did you do?

If possible, provide a recipe for reproducing the error.
A complete runnable program is good.
A link on play.golang.org is best.

zipReader, err := zip.NewReader(bytes.NewReader(respValue), -1)
  • -1 may be the http.Response.ContentLength

What did you expect to see?

panic(0x60a540, 0xc42000d190)
	/usr/local/go/src/runtime/panic.go:500 +0x1a1
archive/zip.readDirectoryEnd(0x93eec0, 0xc420013230, 0xffffffffffffffff, 0x6672a9, 0xc41ffff1d9, 0x0)
	/usr/local/go/src/archive/zip/reader.go:397 +0x9d
archive/zip.(*Reader).init(0xc42001c480, 0x93eec0, 0xc420013230, 0xffffffffffffffff, 0x620ba0, 0x1)
	/usr/local/go/src/archive/zip/reader.go:79 +0x5d
archive/zip.NewReader(0x93eec0, 0xc420013230, 0xffffffffffffffff, 0x4, 0x0, 0x0)
	/usr/local/go/src/archive/zip/reader.go:72 +0x62

My Question

  • The second parameter of function zip.NewReader is int64,and -1 has passed ,the program panic but not return a error.
  • because the function zip.NewReader has an error as returned value, so the way of design is Reasonable
@zegl
Copy link
Contributor

zegl commented Jul 25, 2018

This is reproducible with Go 1.10: playground.

I suggest that we add a check to zip.NewReader to make sure that size >= 0, and return an error if it's not. Alternatively improve the documentation to mention that the function will panic if size is smaller than 0.

@iamoryanmoshe
Copy link
Contributor

What is causing the panic though? No input checks?

@bradfitz bradfitz changed the title NewReader(r io.ReaderAt, size int64) function panic while I pass -1 as the second parameters archive/zip: NewReader panics on negative size Jul 25, 2018
@bradfitz bradfitz added this to the Go1.12 milestone Jul 25, 2018
@bradfitz bradfitz added the NeedsFix The path to resolution is known, but the work has not been done. label Jul 25, 2018
@bradfitz
Copy link
Contributor

I suppose we could just return an error there instead, as it already returns an error.

I think adding documentation would be overkill, as -1 for a size seems like something you'd only do by mistake anyway.

@jeet-parekh
Copy link
Contributor

I see @dsnet is assigned. Mind if I go ahead and submit a CL to fix this?

@bradfitz
Copy link
Contributor

Go for it. Note that we won't review it until Go 1.11 is out in August, though, so no rush.

@jeet-parekh
Copy link
Contributor

Got it.

@dsnet
Copy link
Member

dsnet commented Jul 28, 2018

Yep, go for it.

@gopherbot
Copy link

Change https://golang.org/cl/126617 mentions this issue: archive/zip: return error from NewReader when negative size is passed

@golang golang locked and limited conversation to collaborators Aug 21, 2019
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
FrozenDueToAge help wanted NeedsFix The path to resolution is known, but the work has not been done.
Projects
None yet
Development

No branches or pull requests

7 participants