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 [email protected].
For more options, visit https://groups.google.com/d/optout.