From 61171b32b43978b4cdeda28db8f4a2bc120ec48d Mon Sep 17 00:00:00 2001
From: Patrick <dreamlike.sky@foxmail.com>
Date: Thu, 2 Jan 2020 20:48:35 +0800
Subject: [PATCH] fix

---
 filter/impl/generic_service_filter.go | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)

diff --git a/filter/impl/generic_service_filter.go b/filter/impl/generic_service_filter.go
index 61f4fbef2..2fde925d6 100644
--- a/filter/impl/generic_service_filter.go
+++ b/filter/impl/generic_service_filter.go
@@ -58,6 +58,7 @@ func (ef *GenericServiceFilter) Invoke(invoker protocol.Invoker, invocation prot
 	}
 
 	var (
+		ok         bool
 		err        error
 		methodName string
 		newParams  []interface{}
@@ -79,26 +80,30 @@ func (ef *GenericServiceFilter) Invoke(invoker protocol.Invoker, invocation prot
 	argsType = method.ArgsType()
 	genericKey = invocation.AttachmentsByKey(constant.GENERIC_KEY, GENERIC_SERIALIZATION_DEFAULT)
 	if genericKey == GENERIC_SERIALIZATION_DEFAULT {
-		oldParams = invocation.Arguments()[2].([]hessian.Object)
+		oldParams, ok = invocation.Arguments()[2].([]hessian.Object)
 	} else {
 		logger.Errorf("[Generic Service Filter] Don't support this generic: %s", genericKey)
 		return &protocol.RPCResult{}
 	}
+	if !ok {
+		logger.Errorf("[Generic Service Filter] wrong serialization")
+		return &protocol.RPCResult{}
+	}
 	if len(oldParams) != len(argsType) {
 		logger.Errorf("[Generic Service Filter] method:%s invocation arguments number was wrong", methodName)
 		return &protocol.RPCResult{}
 	}
 	// oldParams convert to newParams
+	newParams = make([]interface{}, len(oldParams))
 	for i := range argsType {
-		var newParam interface{}
-		newParam = reflect.New(argsType[i]).Interface()
+		newParam := reflect.New(argsType[i]).Interface()
 		err = mapstructure.Decode(oldParams[i], newParam)
 		newParam = reflect.ValueOf(newParam).Elem().Interface()
 		if err != nil {
 			logger.Errorf("[Generic Service Filter] decode arguments map to struct wrong: error{%v}", perrors.WithStack(err))
 			return &protocol.RPCResult{}
 		}
-		newParams = append(newParams, newParam)
+		newParams[i] = newParam
 	}
 	newInvocation := invocation2.NewRPCInvocation(methodName, newParams, invocation.Attachments())
 	newInvocation.SetReply(invocation.Reply())
-- 
GitLab