diff options
| author | vincentgoat <linguohui1@huawei.com> | 2022-06-29 17:27:08 +0800 |
|---|---|---|
| committer | vincentgoat <linguohui1@huawei.com> | 2022-07-11 21:14:49 +0800 |
| commit | 3d4fc67300707c1845bcdd8445d9bdf41fbfe700 (patch) | |
| tree | 7e1535727af5ab3a9b26fbc94806eebd36183ed6 | |
| parent | Merge pull request #4007 from gy95/automated-cherry-pick-of-#3956-upstream-re... (diff) | |
| download | kubeedge-3d4fc67300707c1845bcdd8445d9bdf41fbfe700.tar.gz | |
fix possible nil pointer of message
Signed-off-by: vincentgoat <linguohui1@huawei.com>
4 files changed, 28 insertions, 3 deletions
diff --git a/cloud/pkg/cloudhub/handler/messagehandler.go b/cloud/pkg/cloudhub/handler/messagehandler.go index 5a85a328f..ccbc30874 100644 --- a/cloud/pkg/cloudhub/handler/messagehandler.go +++ b/cloud/pkg/cloudhub/handler/messagehandler.go @@ -116,7 +116,10 @@ func (mh *MessageHandle) HandleServer(container *mux.MessageContainer, writer mu klog.Errorf("Fail to serve node %s, reach node limit", nodeID) return } - + if container.Message == nil { + klog.Errorf("Handle a nil message error, node : %s", nodeID) + return + } klog.V(4).Infof("[cloudhub/HandlerServer] get msg from edge(%v): %+v", nodeID, container.Message) if container.Message.GetOperation() == model.OpKeepalive { klog.V(4).Infof("Keepalive message received from node: %s", nodeID) @@ -388,8 +391,15 @@ func (mh *MessageHandle) ListMessageWriteLoop(info *model.HubInfo, stopServe cha klog.Errorf("nodeListStore for node %s doesn't exist", info.NodeID) continue } - msg := obj.(*beehiveModel.Message) - + msg, ok := obj.(*beehiveModel.Message) + if !ok { + klog.Errorf("list message type %T is invalid for node: %s", obj, info.NodeID) + continue + } + if msg == nil { + klog.Errorf("list message is nil for node: %s", info.NodeID) + continue + } if model.IsNodeStopped(msg) { klog.Warningf("node %s is deleted, data for node will be cleaned up", info.NodeID) nodeQueue.ShutDown() diff --git a/cloud/pkg/router/listener/message.go b/cloud/pkg/router/listener/message.go index a5f232ba6..341586779 100644 --- a/cloud/pkg/router/listener/message.go +++ b/cloud/pkg/router/listener/message.go @@ -74,6 +74,9 @@ func Process(module string) { } func (mh *MessageHandler) HandleMessage(message *model.Message) error { + if message == nil { + return fmt.Errorf("nil message error") + } if message.GetParentID() != "" { mh.callback(message) return nil diff --git a/staging/src/github.com/kubeedge/viaduct/pkg/conn/quic.go b/staging/src/github.com/kubeedge/viaduct/pkg/conn/quic.go index 9ca103bd5..fa0c07d02 100644 --- a/staging/src/github.com/kubeedge/viaduct/pkg/conn/quic.go +++ b/staging/src/github.com/kubeedge/viaduct/pkg/conn/quic.go @@ -61,6 +61,10 @@ func NewQuicConn(options *ConnectionOptions) *QuicConnection { // process header message func (conn *QuicConnection) headerMessage(msg *model.Message) error { + if msg == nil { + klog.Errorf("nil message error") + return fmt.Errorf("nil message error") + } headers := make(http.Header) err := json.Unmarshal(msg.GetContent().([]byte), &headers) if err != nil { diff --git a/staging/src/github.com/kubeedge/viaduct/pkg/mux/pattern.go b/staging/src/github.com/kubeedge/viaduct/pkg/mux/pattern.go index c4bc4f4fb..a27472ead 100644 --- a/staging/src/github.com/kubeedge/viaduct/pkg/mux/pattern.go +++ b/staging/src/github.com/kubeedge/viaduct/pkg/mux/pattern.go @@ -39,10 +39,18 @@ func (pattern *MessagePattern) Op(operation string) *MessagePattern { } func (pattern *MessagePattern) matchOp(message *model.Message) bool { + if message == nil { + klog.Errorf("nil message can't be matched, operation: %s", pattern.operation) + return false + } return strings.Compare(pattern.operation, message.GetOperation()) == 0 || strings.Compare(pattern.operation, "*") == 0 } func (pattern *MessagePattern) Match(message *model.Message) bool { + if message == nil { + klog.Errorf("nil message can't be matched, resource: %s", pattern.resource) + return false + } return pattern.resExpr.Matcher.Match([]byte(message.GetResource())) && pattern.matchOp(message) } |
