diff --git a/events/producer/events.go b/events/producer/events.go index d0a33f006ed..69e96b076b2 100644 --- a/events/producer/events.go +++ b/events/producer/events.go @@ -50,6 +50,10 @@ type chaincodeHandlerList struct { } func (hl *chaincodeHandlerList) add(ie *pb.Interest, h *handler) (bool, error) { + if h == nil { + return false, fmt.Errorf("cannot add nil chaincode handler") + } + hl.Lock() defer hl.Unlock() @@ -157,6 +161,9 @@ func (hl *chaincodeHandlerList) foreach(e *pb.Event, action func(h *handler)) { } func (hl *genericHandlerList) add(ie *pb.Interest, h *handler) (bool, error) { + if h == nil { + return false, fmt.Errorf("cannot add nil generic handler") + } hl.Lock() if _, ok := hl.handlers[h]; ok { hl.Unlock() diff --git a/events/producer/events_test.go b/events/producer/events_test.go index 0b83c24fd5a..e3a8eddaaf7 100644 --- a/events/producer/events_test.go +++ b/events/producer/events_test.go @@ -127,6 +127,8 @@ func TestRegister(t *testing.T) { // attempt to register handlers (invalid type or nil handlers) assert.Error(t, registerHandler(&peer.Interest{EventType: 100}, nil)) + assert.Error(t, registerHandler(&peer.Interest{EventType: peer.EventType_BLOCK}, nil)) + assert.Error(t, registerHandler(&peer.Interest{EventType: peer.EventType_CHAINCODE}, nil)) // attempt to register valid handler recvChan := make(chan *streamEvent)