Fix panic on nil message (#29)

Fixed a bug I found in `saltyd`:

```
saltyim_saltyd.1.w8s8tw903qnj@dm3.mills.io    | 2022/04/02 21:49:31 http: panic serving 10.0.2.82:50050: interface conversion: interface {} is nil, not msgbus.Message
saltyim_saltyd.1.w8s8tw903qnj@dm3.mills.io    | goroutine 1839 [running]:
saltyim_saltyd.1.w8s8tw903qnj@dm3.mills.io    | net/http.(*conn).serve.func1()
saltyim_saltyd.1.w8s8tw903qnj@dm3.mills.io    | 	/usr/local/go/src/net/http/server.go:1825 +0xbf
saltyim_saltyd.1.w8s8tw903qnj@dm3.mills.io    | panic({0xc8c2c0, 0xc000095e60})
saltyim_saltyd.1.w8s8tw903qnj@dm3.mills.io    | 	/usr/local/go/src/runtime/panic.go:844 +0x258
saltyim_saltyd.1.w8s8tw903qnj@dm3.mills.io    | git.mills.io/prologic/msgbus.(*MessageBus).Subscribe.func1({0x0?, 0x0?})
saltyim_saltyd.1.w8s8tw903qnj@dm3.mills.io    | 	/go/pkg/mod/git.mills.io/prologic/msgbus@v0.1.13/msgbus.go:487 +0x205
saltyim_saltyd.1.w8s8tw903qnj@dm3.mills.io    | git.mills.io/prologic/msgbus.(*Queue).ForEach(0xc00015abe0, 0xc00043b020)
saltyim_saltyd.1.w8s8tw903qnj@dm3.mills.io    | 	/go/pkg/mod/git.mills.io/prologic/msgbus@v0.1.13/queue.go:126 +0x110
saltyim_saltyd.1.w8s8tw903qnj@dm3.mills.io    | git.mills.io/prologic/msgbus.(*MessageBus).Subscribe(0xc0004fa000, {0xc0003088f0, 0xf}, {0xc0003aae05, 0x20}, {0xc0005330a8, 0x1, 0x40d987?})
saltyim_saltyd.1.w8s8tw903qnj@dm3.mills.io    | 	/go/pkg/mod/git.mills.io/prologic/msgbus@v0.1.13/msgbus.go:486 +0x5ad
saltyim_saltyd.1.w8s8tw903qnj@dm3.mills.io    | git.mills.io/prologic/msgbus.(*Client).Start(0xc0000ac300)
saltyim_saltyd.1.w8s8tw903qnj@dm3.mills.io    | 	/go/pkg/mod/git.mills.io/prologic/msgbus@v0.1.13/msgbus.go:742 +0xb5
saltyim_saltyd.1.w8s8tw903qnj@dm3.mills.io    | git.mills.io/prologic/msgbus.(*MessageBus).ServeHTTP(0xc0004fa000, {0x2b1ea08, 0xc0003b4000}, 0xc0002a8200)
saltyim_saltyd.1.w8s8tw903qnj@dm3.mills.io    | 	/go/pkg/mod/git.mills.io/prologic/msgbus@v0.1.13/msgbus.go:617 +0x758
saltyim_saltyd.1.w8s8tw903qnj@dm3.mills.io    | go.mills.io/saltyim/internal.(*Server).initRoutes.func1({0x2b1ea08?, 0xc0003b4000?}, 0xd8732a?, {0x1d?, 0x0?, 0x0?})
saltyim_saltyd.1.w8s8tw903qnj@dm3.mills.io    | 	/src/internal/handlers.go:53 +0x37
saltyim_saltyd.1.w8s8tw903qnj@dm3.mills.io    | go.mills.io/saltyim/internal.NewServer.func1.1({0x2b1ea08, 0xc0003b4000}, 0xc0003aa200?, {0xc0000ca160, 0x1, 0x1})
saltyim_saltyd.1.w8s8tw903qnj@dm3.mills.io    | 	/src/internal/server.go:388 +0x26d
saltyim_saltyd.1.w8s8tw903qnj@dm3.mills.io    | github.com/julienschmidt/httprouter.(*Router).ServeHTTP(0xc00024e900, {0x2b1ea08, 0xc0003b4000}, 0xc0002a8200)
saltyim_saltyd.1.w8s8tw903qnj@dm3.mills.io    | 	/go/pkg/mod/github.com/julienschmidt/httprouter@v1.3.0/router.go:387 +0x82b
saltyim_saltyd.1.w8s8tw903qnj@dm3.mills.io    | go.mills.io/saltyim/internal.(*Router).ServeHTTP(0xc44960?, {0x2b1ea08?, 0xc0003b4000?}, 0x4?)
saltyim_saltyd.1.w8s8tw903qnj@dm3.mills.io    | 	/src/internal/router.go:144 +0x25
saltyim_saltyd.1.w8s8tw903qnj@dm3.mills.io    | github.com/justinas/nosurf.(*CSRFHandler).handleSuccess(...)
saltyim_saltyd.1.w8s8tw903qnj@dm3.mills.io    | 	/go/pkg/mod/github.com/justinas/nosurf@v1.1.1/handler.go:187
saltyim_saltyd.1.w8s8tw903qnj@dm3.mills.io    | github.com/justinas/nosurf.(*CSRFHandler).ServeHTTP(0xc0002245a0, {0x2b1ea08, 0xc0003b4000}, 0x4?)
saltyim_saltyd.1.w8s8tw903qnj@dm3.mills.io    | 	/go/pkg/mod/github.com/justinas/nosurf@v1.1.1/handler.go:144 +0x5c4
saltyim_saltyd.1.w8s8tw903qnj@dm3.mills.io    | github.com/NYTimes/gziphandler.GzipHandlerWithOpts.func1.1({0x2b1f0f8, 0xc0000ca060}, 0x4c4801?)
saltyim_saltyd.1.w8s8tw903qnj@dm3.mills.io    | 	/go/pkg/mod/github.com/!n!y!times/gziphandler@v1.1.1/gzip.go:338 +0x262
saltyim_saltyd.1.w8s8tw903qnj@dm3.mills.io    | net/http.HandlerFunc.ServeHTTP(0x2?, {0x2b1f0f8?, 0xc0000ca060?}, 0xc0003d7380?)
saltyim_saltyd.1.w8s8tw903qnj@dm3.mills.io    | 	/usr/local/go/src/net/http/server.go:2084 +0x2f
saltyim_saltyd.1.w8s8tw903qnj@dm3.mills.io    | github.com/unrolled/logger.(*Logger).Handler.func1({0x2b1f7e8?, 0xc0001980e0}, 0xc0002a8100)
saltyim_saltyd.1.w8s8tw903qnj@dm3.mills.io    | 	/go/pkg/mod/github.com/unrolled/logger@v0.0.0-20201216141554-31a3694fe979/logger.go:80 +0xf4
saltyim_saltyd.1.w8s8tw903qnj@dm3.mills.io    | net/http.HandlerFunc.ServeHTTP(0xc0003aa226?, {0x2b1f7e8?, 0xc0001980e0?}, 0xc000188400?)
saltyim_saltyd.1.w8s8tw903qnj@dm3.mills.io    | 	/usr/local/go/src/net/http/server.go:2084 +0x2f
saltyim_saltyd.1.w8s8tw903qnj@dm3.mills.io    | net/http.serverHandler.ServeHTTP({0xc00007c210?}, {0x2b1f7e8, 0xc0001980e0}, 0xc0002a8100)
saltyim_saltyd.1.w8s8tw903qnj@dm3.mills.io    | 	/usr/local/go/src/net/http/server.go:2916 +0x43b
saltyim_saltyd.1.w8s8tw903qnj@dm3.mills.io    | net/http.(*conn).serve(0xc000790000, {0x2b20228, 0xc0002ab830})
saltyim_saltyd.1.w8s8tw903qnj@dm3.mills.io    | 	/usr/local/go/src/net/http/server.go:1966 +0x5d7
saltyim_saltyd.1.w8s8tw903qnj@dm3.mills.io    | created by net/http.(*Server).Serve
saltyim_saltyd.1.w8s8tw903qnj@dm3.mills.io    | 	/usr/local/go/src/net/http/server.go:3071 +0x4db
saltyim_saltyd.1.w8s8tw903qnj@dm3.mills.io    | time="2022-04-02T21:49:52Z" level=debug msg="pong latency of 10.0.2.82:49826: 1.671603ms"
saltyim_saltyd.1.w8s8tw903qnj@dm3.mills.io    | time="2022-04-02T21:50:20Z" level=info msg="synced store"
saltyim_saltyd.1.w8s8tw903qnj@dm3.mills.io    | [saltyd] 2022/04/02 21:50:32 (172.69.42.134) "GET /avatar/d3d52221e8da5a8ae012f4e2db0631c181f4156f0edcde5cffa25b347c7ceda8 HTTP/1.1" 304 0 108.078µs
```

Co-authored-by: James Mills <prologic@shortcircuit.net.au>
Reviewed-on: https://git.mills.io/prologic/msgbus/pulls/29
This commit is contained in:
James Mills 2022-04-02 21:59:10 +00:00
vecāks 9ee8d0f867
revīzija 14b5443f50

Parādīt failu

@ -484,9 +484,8 @@ func (mb *MessageBus) Subscribe(id, topic string, opts ...SubscribeOption) chan
var n int
log.Debugf("subscriber wants to start from %d", o.Index)
q.ForEach(func(item interface{}) error {
msg := item.(Message)
log.Debugf("found #%v", msg)
if msg.ID >= o.Index {
if msg, ok := item.(Message); ok && msg.ID >= o.Index {
log.Debugf("found #%v", msg)
ch <- msg
n++
}