beberlei / fastcgi-serve

Small webserver to use in front of fast-cgi servers (php-fpm, hhvm, ...)
92 stars 15 forks source link

When the fcgi backend is not present, the server segfaults #9

Open lovasoa opened 4 years ago

lovasoa commented 4 years ago

When there is nothing listening on the fastCGI server port, instead of getting a readable error message, one gets :

``` $ ~/go/bin/fastcgi-serve Listening on http://localhost:8080 Document root is /Users/olojkine/Developpement/iipsrv Press Ctrl-C to quit. err: dial tcp 127.0.0.1:9000: connect: connection refused2019/10/29 14:05:31 http: panic serving 127.0.0.1:54013: runtime error: invalid memory address or nil pointer dereference goroutine 5 [running]: net/http.(*conn).serve.func1(0xc000126000) /usr/local/go/src/net/http/server.go:1767 +0x139 panic(0x12c40a0, 0x1562980) /usr/local/go/src/runtime/panic.go:679 +0x1b2 github.com/beberlei/hhvm-serve/fcgiclient.(*FCGIClient).Request(0xc0001280a0, 0xc0001377d0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, ...) /Users/olojkine/go/src/github.com/beberlei/hhvm-serve/fcgiclient/fastcgi.go:294 +0x6e main.handler(0x138ad80, 0xc000158000, 0xc00013a000) /Users/olojkine/go/src/github.com/beberlei/fastcgi-serve/fastcgi-serve.go:91 +0xb0f net/http.HandlerFunc.ServeHTTP(0x13372e8, 0x138ad80, 0xc000158000, 0xc00013a000) /usr/local/go/src/net/http/server.go:2007 +0x44 net/http.(*ServeMux).ServeHTTP(0x156eac0, 0x138ad80, 0xc000158000, 0xc00013a000) /usr/local/go/src/net/http/server.go:2387 +0x1bd net/http.serverHandler.ServeHTTP(0xc000118000, 0x138ad80, 0xc000158000, 0xc00013a000) /usr/local/go/src/net/http/server.go:2802 +0xa4 net/http.(*conn).serve(0xc000126000, 0x138b3c0, 0xc0000e04c0) /usr/local/go/src/net/http/server.go:1890 +0x875 created by net/http.(*Server).Serve /usr/local/go/src/net/http/server.go:2927 +0x38e err: dial tcp 127.0.0.1:9000: connect: connection refused2019/10/29 14:05:31 http: panic serving 127.0.0.1:54015: runtime error: invalid memory address or nil pointer dereference goroutine 21 [running]: net/http.(*conn).serve.func1(0xc0000d0b40) /usr/local/go/src/net/http/server.go:1767 +0x139 panic(0x12c40a0, 0x1562980) /usr/local/go/src/runtime/panic.go:679 +0x1b2 github.com/beberlei/hhvm-serve/fcgiclient.(*FCGIClient).Request(0xc0000d8320, 0xc0001397d0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, ...) /Users/olojkine/go/src/github.com/beberlei/hhvm-serve/fcgiclient/fastcgi.go:294 +0x6e main.handler(0x138ad80, 0xc0001a6000, 0xc000190000) /Users/olojkine/go/src/github.com/beberlei/fastcgi-serve/fastcgi-serve.go:91 +0xb0f net/http.HandlerFunc.ServeHTTP(0x13372e8, 0x138ad80, 0xc0001a6000, 0xc000190000) /usr/local/go/src/net/http/server.go:2007 +0x44 net/http.(*ServeMux).ServeHTTP(0x156eac0, 0x138ad80, 0xc0001a6000, 0xc000190000) /usr/local/go/src/net/http/server.go:2387 +0x1bd net/http.serverHandler.ServeHTTP(0xc000118000, 0x138ad80, 0xc0001a6000, 0xc000190000) /usr/local/go/src/net/http/server.go:2802 +0xa4 net/http.(*conn).serve(0xc0000d0b40, 0x138b3c0, 0xc0000800c0) /usr/local/go/src/net/http/server.go:1890 +0x875 created by net/http.(*Server).Serve /usr/local/go/src/net/http/server.go:2927 +0x38e err: dial tcp 127.0.0.1:9000: connect: connection refused2019/10/29 14:05:31 http: panic serving 127.0.0.1:54017: runtime error: invalid memory address or nil pointer dereference goroutine 51 [running]: net/http.(*conn).serve.func1(0xc0001960a0) /usr/local/go/src/net/http/server.go:1767 +0x139 panic(0x12c40a0, 0x1562980) /usr/local/go/src/runtime/panic.go:679 +0x1b2 github.com/beberlei/hhvm-serve/fcgiclient.(*FCGIClient).Request(0xc0001bc0a0, 0xc0001397d0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, ...) /Users/olojkine/go/src/github.com/beberlei/hhvm-serve/fcgiclient/fastcgi.go:294 +0x6e main.handler(0x138ad80, 0xc0001c8000, 0xc00013a100) /Users/olojkine/go/src/github.com/beberlei/fastcgi-serve/fastcgi-serve.go:91 +0xb0f net/http.HandlerFunc.ServeHTTP(0x13372e8, 0x138ad80, 0xc0001c8000, 0xc00013a100) /usr/local/go/src/net/http/server.go:2007 +0x44 net/http.(*ServeMux).ServeHTTP(0x156eac0, 0x138ad80, 0xc0001c8000, 0xc00013a100) /usr/local/go/src/net/http/server.go:2387 +0x1bd net/http.serverHandler.ServeHTTP(0xc000118000, 0x138ad80, 0xc0001c8000, 0xc00013a100) /usr/local/go/src/net/http/server.go:2802 +0xa4 net/http.(*conn).serve(0xc0001960a0, 0x138b3c0, 0xc0000e0580) /usr/local/go/src/net/http/server.go:1890 +0x875 created by net/http.(*Server).Serve /usr/local/go/src/net/http/server.go:2927 +0x38e err: dial tcp 127.0.0.1:9000: connect: connection refused2019/10/29 14:05:31 http: panic serving 127.0.0.1:54019: runtime error: invalid memory address or nil pointer dereference goroutine 52 [running]: net/http.(*conn).serve.func1(0xc000196140) /usr/local/go/src/net/http/server.go:1767 +0x139 panic(0x12c40a0, 0x1562980) /usr/local/go/src/runtime/panic.go:679 +0x1b2 github.com/beberlei/hhvm-serve/fcgiclient.(*FCGIClient).Request(0xc0000d83c0, 0xc0001337d0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, ...) /Users/olojkine/go/src/github.com/beberlei/hhvm-serve/fcgiclient/fastcgi.go:294 +0x6e main.handler(0x138ad80, 0xc0001180e0, 0xc00013a200) /Users/olojkine/go/src/github.com/beberlei/fastcgi-serve/fastcgi-serve.go:91 +0xb0f net/http.HandlerFunc.ServeHTTP(0x13372e8, 0x138ad80, 0xc0001180e0, 0xc00013a200) /usr/local/go/src/net/http/server.go:2007 +0x44 net/http.(*ServeMux).ServeHTTP(0x156eac0, 0x138ad80, 0xc0001180e0, 0xc00013a200) /usr/local/go/src/net/http/server.go:2387 +0x1bd net/http.serverHandler.ServeHTTP(0xc000118000, 0x138ad80, 0xc0001180e0, 0xc00013a200) /usr/local/go/src/net/http/server.go:2802 +0xa4 net/http.(*conn).serve(0xc000196140, 0x138b3c0, 0xc0000e0600) /usr/local/go/src/net/http/server.go:1890 +0x875 created by net/http.(*Server).Serve /usr/local/go/src/net/http/server.go:2927 +0x38e err: dial tcp 127.0.0.1:9000: connect: connection refused2019/10/29 14:05:31 http: panic serving 127.0.0.1:54021: runtime error: invalid memory address or nil pointer dereference goroutine 23 [running]: net/http.(*conn).serve.func1(0xc0000d0c80) /usr/local/go/src/net/http/server.go:1767 +0x139 panic(0x12c40a0, 0x1562980) /usr/local/go/src/runtime/panic.go:679 +0x1b2 github.com/beberlei/hhvm-serve/fcgiclient.(*FCGIClient).Request(0xc0001bc190, 0xc0001337d0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, ...) /Users/olojkine/go/src/github.com/beberlei/hhvm-serve/fcgiclient/fastcgi.go:294 +0x6e main.handler(0x138ad80, 0xc0001c80e0, 0xc0001fe000) /Users/olojkine/go/src/github.com/beberlei/fastcgi-serve/fastcgi-serve.go:91 +0xb0f net/http.HandlerFunc.ServeHTTP(0x13372e8, 0x138ad80, 0xc0001c80e0, 0xc0001fe000) /usr/local/go/src/net/http/server.go:2007 +0x44 net/http.(*ServeMux).ServeHTTP(0x156eac0, 0x138ad80, 0xc0001c80e0, 0xc0001fe000) /usr/local/go/src/net/http/server.go:2387 +0x1bd net/http.serverHandler.ServeHTTP(0xc000118000, 0x138ad80, 0xc0001c80e0, 0xc0001fe000) /usr/local/go/src/net/http/server.go:2802 +0xa4 net/http.(*conn).serve(0xc0000d0c80, 0x138b3c0, 0xc0001a0080) /usr/local/go/src/net/http/server.go:1890 +0x875 created by net/http.(*Server).Serve /usr/local/go/src/net/http/server.go:2927 +0x38e err: dial tcp 127.0.0.1:9000: connect: connection refused2019/10/29 14:05:31 http: panic serving 127.0.0.1:54023: runtime error: invalid memory address or nil pointer dereference goroutine 8 [running]: net/http.(*conn).serve.func1(0xc0001261e0) /usr/local/go/src/net/http/server.go:1767 +0x139 panic(0x12c40a0, 0x1562980) /usr/local/go/src/runtime/panic.go:679 +0x1b2 github.com/beberlei/hhvm-serve/fcgiclient.(*FCGIClient).Request(0xc00021c050, 0xc0002177d0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, ...) /Users/olojkine/go/src/github.com/beberlei/hhvm-serve/fcgiclient/fastcgi.go:294 +0x6e main.handler(0x138ad80, 0xc0001580e0, 0xc0001fe100) /Users/olojkine/go/src/github.com/beberlei/fastcgi-serve/fastcgi-serve.go:91 +0xb0f net/http.HandlerFunc.ServeHTTP(0x13372e8, 0x138ad80, 0xc0001580e0, 0xc0001fe100) /usr/local/go/src/net/http/server.go:2007 +0x44 net/http.(*ServeMux).ServeHTTP(0x156eac0, 0x138ad80, 0xc0001580e0, 0xc0001fe100) /usr/local/go/src/net/http/server.go:2387 +0x1bd net/http.serverHandler.ServeHTTP(0xc000118000, 0x138ad80, 0xc0001580e0, 0xc0001fe100) /usr/local/go/src/net/http/server.go:2802 +0xa4 net/http.(*conn).serve(0xc0001261e0, 0x138b3c0, 0xc0001a0100) /usr/local/go/src/net/http/server.go:1890 +0x875 created by net/http.(*Server).Serve /usr/local/go/src/net/http/server.go:2927 +0x38e err: dial tcp 127.0.0.1:9000: connect: connection refused2019/10/29 14:05:31 http: panic serving 127.0.0.1:54025: runtime error: invalid memory address or nil pointer dereference goroutine 53 [running]: net/http.(*conn).serve.func1(0xc0001961e0) /usr/local/go/src/net/http/server.go:1767 +0x139 panic(0x12c40a0, 0x1562980) /usr/local/go/src/runtime/panic.go:679 +0x1b2 github.com/beberlei/hhvm-serve/fcgiclient.(*FCGIClient).Request(0xc0001281e0, 0xc0001337d0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, ...) /Users/olojkine/go/src/github.com/beberlei/hhvm-serve/fcgiclient/fastcgi.go:294 +0x6e main.handler(0x138ad80, 0xc0001c81c0, 0xc000234000) /Users/olojkine/go/src/github.com/beberlei/fastcgi-serve/fastcgi-serve.go:91 +0xb0f net/http.HandlerFunc.ServeHTTP(0x13372e8, 0x138ad80, 0xc0001c81c0, 0xc000234000) /usr/local/go/src/net/http/server.go:2007 +0x44 net/http.(*ServeMux).ServeHTTP(0x156eac0, 0x138ad80, 0xc0001c81c0, 0xc000234000) /usr/local/go/src/net/http/server.go:2387 +0x1bd net/http.serverHandler.ServeHTTP(0xc000118000, 0x138ad80, 0xc0001c81c0, 0xc000234000) /usr/local/go/src/net/http/server.go:2802 +0xa4 net/http.(*conn).serve(0xc0001961e0, 0x138b3c0, 0xc000150140) /usr/local/go/src/net/http/server.go:1890 +0x875 created by net/http.(*Server).Serve /usr/local/go/src/net/http/server.go:2927 +0x38e err: dial tcp 127.0.0.1:9000: connect: connection refused2019/10/29 14:05:31 http: panic serving 127.0.0.1:54027: runtime error: invalid memory address or nil pointer dereference goroutine 54 [running]: net/http.(*conn).serve.func1(0xc000196280) /usr/local/go/src/net/http/server.go:1767 +0x139 panic(0x12c40a0, 0x1562980) /usr/local/go/src/runtime/panic.go:679 +0x1b2 github.com/beberlei/hhvm-serve/fcgiclient.(*FCGIClient).Request(0xc00021c0f0, 0xc0001337d0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, ...) /Users/olojkine/go/src/github.com/beberlei/hhvm-serve/fcgiclient/fastcgi.go:294 +0x6e main.handler(0x138ad80, 0xc0001a60e0, 0xc000190100) /Users/olojkine/go/src/github.com/beberlei/fastcgi-serve/fastcgi-serve.go:91 +0xb0f net/http.HandlerFunc.ServeHTTP(0x13372e8, 0x138ad80, 0xc0001a60e0, 0xc000190100) /usr/local/go/src/net/http/server.go:2007 +0x44 net/http.(*ServeMux).ServeHTTP(0x156eac0, 0x138ad80, 0xc0001a60e0, 0xc000190100) /usr/local/go/src/net/http/server.go:2387 +0x1bd net/http.serverHandler.ServeHTTP(0xc000118000, 0x138ad80, 0xc0001a60e0, 0xc000190100) /usr/local/go/src/net/http/server.go:2802 +0xa4 net/http.(*conn).serve(0xc000196280, 0x138b3c0, 0xc0000802c0) /usr/local/go/src/net/http/server.go:1890 +0x875 created by net/http.(*Server).Serve /usr/local/go/src/net/http/server.go:2927 +0x38e err: dial tcp 127.0.0.1:9000: connect: connection refused2019/10/29 14:05:31 http: panic serving 127.0.0.1:54029: runtime error: invalid memory address or nil pointer dereference goroutine 56 [running]: net/http.(*conn).serve.func1(0xc0001963c0) /usr/local/go/src/net/http/server.go:1767 +0x139 panic(0x12c40a0, 0x1562980) /usr/local/go/src/runtime/panic.go:679 +0x1b2 github.com/beberlei/hhvm-serve/fcgiclient.(*FCGIClient).Request(0xc0001bc320, 0xc0001337d0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, ...) /Users/olojkine/go/src/github.com/beberlei/hhvm-serve/fcgiclient/fastcgi.go:294 +0x6e main.handler(0x138ad80, 0xc0001181c0, 0xc000234100) /Users/olojkine/go/src/github.com/beberlei/fastcgi-serve/fastcgi-serve.go:91 +0xb0f net/http.HandlerFunc.ServeHTTP(0x13372e8, 0x138ad80, 0xc0001181c0, 0xc000234100) /usr/local/go/src/net/http/server.go:2007 +0x44 net/http.(*ServeMux).ServeHTTP(0x156eac0, 0x138ad80, 0xc0001181c0, 0xc000234100) /usr/local/go/src/net/http/server.go:2387 +0x1bd net/http.serverHandler.ServeHTTP(0xc000118000, 0x138ad80, 0xc0001181c0, 0xc000234100) /usr/local/go/src/net/http/server.go:2802 +0xa4 net/http.(*conn).serve(0xc0001963c0, 0x138b3c0, 0xc0001501c0) /usr/local/go/src/net/http/server.go:1890 +0x875 created by net/http.(*Server).Serve /usr/local/go/src/net/http/server.go:2927 +0x38e err: dial tcp 127.0.0.1:9000: connect: connection refused2019/10/29 14:05:31 http: panic serving 127.0.0.1:54031: runtime error: invalid memory address or nil pointer dereference goroutine 57 [running]: net/http.(*conn).serve.func1(0xc000196460) /usr/local/go/src/net/http/server.go:1767 +0x139 panic(0x12c40a0, 0x1562980) /usr/local/go/src/runtime/panic.go:679 +0x1b2 github.com/beberlei/hhvm-serve/fcgiclient.(*FCGIClient).Request(0xc00021c1e0, 0xc0001337d0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, ...) /Users/olojkine/go/src/github.com/beberlei/hhvm-serve/fcgiclient/fastcgi.go:294 +0x6e main.handler(0x138ad80, 0xc0001a61c0, 0xc00013a300) /Users/olojkine/go/src/github.com/beberlei/fastcgi-serve/fastcgi-serve.go:91 +0xb0f net/http.HandlerFunc.ServeHTTP(0x13372e8, 0x138ad80, 0xc0001a61c0, 0xc00013a300) /usr/local/go/src/net/http/server.go:2007 +0x44 net/http.(*ServeMux).ServeHTTP(0x156eac0, 0x138ad80, 0xc0001a61c0, 0xc00013a300) /usr/local/go/src/net/http/server.go:2387 +0x1bd net/http.serverHandler.ServeHTTP(0xc000118000, 0x138ad80, 0xc0001a61c0, 0xc00013a300) /usr/local/go/src/net/http/server.go:2802 +0xa4 net/http.(*conn).serve(0xc000196460, 0x138b3c0, 0xc0000e07c0) /usr/local/go/src/net/http/server.go:1890 +0x875 created by net/http.(*Server).Serve /usr/local/go/src/net/http/server.go:2927 +0x38e ```
lovasoa commented 4 years ago

I think the problem is a missing return here: https://github.com/beberlei/fastcgi-serve/blob/master/fastcgi-serve.go#L88