summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorvincentgoat <linguohui1@huawei.com>2022-06-29 17:27:08 +0800
committervincentgoat <linguohui1@huawei.com>2022-07-11 21:14:49 +0800
commit3d4fc67300707c1845bcdd8445d9bdf41fbfe700 (patch)
tree7e1535727af5ab3a9b26fbc94806eebd36183ed6
parentMerge pull request #4007 from gy95/automated-cherry-pick-of-#3956-upstream-re... (diff)
downloadkubeedge-3d4fc67300707c1845bcdd8445d9bdf41fbfe700.tar.gz
fix possible nil pointer of message
Signed-off-by: vincentgoat <linguohui1@huawei.com>
-rw-r--r--cloud/pkg/cloudhub/handler/messagehandler.go16
-rw-r--r--cloud/pkg/router/listener/message.go3
-rw-r--r--staging/src/github.com/kubeedge/viaduct/pkg/conn/quic.go4
-rw-r--r--staging/src/github.com/kubeedge/viaduct/pkg/mux/pattern.go8
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)
}