First of all I would like to thank you for your time and willing to help. I've tried to treat error.EOF as real error, but it did not help. What is interesting, when I tried to debug it, everything seems to be fine, from gzip point of view, but when it reaches:
body, err := ioutil.ReadAll(reader) if the reader is gzip.Reader - it throws an error: "unexpected EOF" On Thu, Apr 12, 2018 at 10:45 PM andrey mirtchovski <mirtchov...@gmail.com> wrote: > from the panic you can see that you're passing to ReadAll a valid > interface (non-nil type pointer) however the interface contains a nil > object (nil value pointer): > > io/ioutil.ReadAll(0x14ce020, 0x0, 0x0, 0x1a, 0xc420069cb0, 0x1, 0x1) > > to understand why there are more arguments than you expect in the > function call refer to this article and the articles it links to: > > https://joeshaw.org/understanding-go-panic-output/ > > The cause for this is due to the gzip library attempting to read a > header from the reader before fully creating it. If it fails it may > return io.EOF, as described in this comment: > > https://golang.org/src/compress/gzip/gunzip.go?#L180 > > which will be propagated up to your handler and will cause the error > checking to fail. > > your best source of action, in my opinion, is to treat io.EOF from > gzip.NewReader() as a real error. > > On Thu, Apr 12, 2018 at 1:09 PM, Yaroslav Molochko <ono...@gmail.com> > wrote: > > Hi guys, > > > > I have following code: > > > > func handler(w http.ResponseWriter, r *http.Request) { > > var reader io.Reader > > switch r.Header.Get("Content-Encoding") { > > case "gzip": > > gz, err := gzip.NewReader(r.Body) > > if err != nil && err.Error() != "EOF" { > > fmt.Fprintf(w, > > "error with gzip reader: %s", > > err.Error()) > > } > > defer gz.Close() > > reader = gz > > case "deflate": > > def := flate.NewReader(r.Body) > > defer def.Close() > > reader = def > > default: > > // just use the default reader > > reader = r.Body > > } > > body, err := ioutil.ReadAll(reader) > > fmt.Println(string(body)) > > } > > > > non gzip requests are passing by, but gzip is always falling with panic: > > 19:46:09.058697 server.go:2923: http: panic serving 127.0.0.1:63744: > runtime > > error: invalid memory address or nil pointer dereference > > goroutine 29 [running]: > > net/http.(*conn).serve.func1(0xc4200b5ae0) > > /usr/local/Cellar/go/1.10/libexec/src/net/http/server.go:1726 > +0xd0 > > panic(0x13fe840, 0x16cfc60) > > /usr/local/Cellar/go/1.10/libexec/src/runtime/panic.go:505 +0x229 > > compress/gzip.(*Reader).Close(0x0, 0x1a, 0xc420069cb0) > > /usr/local/Cellar/go/1.10/libexec/src/compress/gzip/gunzip.go:292 > > +0x22 > > panic(0x13fe840, 0x16cfc60) > > /usr/local/Cellar/go/1.10/libexec/src/runtime/panic.go:505 +0x229 > > io/ioutil.readAll.func1(0xc420069c00) > > /usr/local/Cellar/go/1.10/libexec/src/io/ioutil/ioutil.go:30 > +0x104 > > panic(0x13fe840, 0x16cfc60) > > /usr/local/Cellar/go/1.10/libexec/src/runtime/panic.go:505 +0x229 > > compress/gzip.(*Reader).Read(0x0, 0xc420204200, 0x200, 0x200, 0x200, > 0x200, > > 0xc420204200) > > /usr/local/Cellar/go/1.10/libexec/src/compress/gzip/gunzip.go:247 > > +0x37 > > bytes.(*Buffer).ReadFrom(0xc4201b78f0, 0x14ce020, 0x0, 0xc4201740a0, > > 0xc420069c10, 0x10d0211) > > /usr/local/Cellar/go/1.10/libexec/src/bytes/buffer.go:205 +0xa0 > > io/ioutil.readAll(0x14ce020, 0x0, 0x200, 0x0, 0x0, 0x0, 0x0, 0x0) > > /usr/local/Cellar/go/1.10/libexec/src/io/ioutil/ioutil.go:36 > +0xb5 > > io/ioutil.ReadAll(0x14ce020, 0x0, 0x0, 0x1a, 0xc420069cb0, 0x1, 0x1) > > /usr/local/Cellar/go/1.10/libexec/src/io/ioutil/ioutil.go:45 > +0x3e > > main.handler(0x14d25c0, 0xc420202380, 0xc42013e200) > > /Users/onorua/dev/go/src/ > github.com/onorua/gpr-edge/gpr-edge.go:83 > > +0xe0 > > net/http.HandlerFunc.ServeHTTP(0x149a500, 0x14d25c0, 0xc420202380, > > 0xc42013e200) > > /usr/local/Cellar/go/1.10/libexec/src/net/http/server.go:1947 > +0x44 > > net/http.(*ServeMux).ServeHTTP(0x16df780, 0x14d25c0, 0xc420202380, > > 0xc42013e200) > > /usr/local/Cellar/go/1.10/libexec/src/net/http/server.go:2337 > +0x130 > > net/http.serverHandler.ServeHTTP(0xc42009d860, 0x14d25c0, 0xc420202380, > > 0xc42013e200) > > /usr/local/Cellar/go/1.10/libexec/src/net/http/server.go:2694 > +0xbc > > net/http.(*conn).serve(0xc4200b5ae0, 0x14d2b40, 0xc42019ea00) > > /usr/local/Cellar/go/1.10/libexec/src/net/http/server.go:1830 > +0x651 > > created by net/http.(*Server).Serve > > /usr/local/Cellar/go/1.10/libexec/src/net/http/server.go:2795 > +0x27b > > what am I doing wrong? > > > > -- > > You received this message because you are subscribed to the Google Groups > > "golang-nuts" group. > > To unsubscribe from this group and stop receiving emails from it, send an > > email to golang-nuts+unsubscr...@googlegroups.com. > > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.