You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@apisix.apache.org by sp...@apache.org on 2021/10/09 04:22:30 UTC

[apisix-go-plugin-runner] branch master updated: fix: avoid reusing nil builder (#42)

This is an automated email from the ASF dual-hosted git repository.

spacewander pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/apisix-go-plugin-runner.git


The following commit(s) were added to refs/heads/master by this push:
     new 9b2683c  fix: avoid reusing nil builder (#42)
9b2683c is described below

commit 9b2683c17dbfe9da02d1a6f795e2760498157179
Author: 罗泽轩 <sp...@gmail.com>
AuthorDate: Sat Oct 9 12:22:25 2021 +0800

    fix: avoid reusing nil builder (#42)
---
 internal/server/server.go      | 26 ++++++++++++++------------
 internal/server/server_test.go |  6 ++++--
 2 files changed, 18 insertions(+), 14 deletions(-)

diff --git a/internal/server/server.go b/internal/server/server.go
index 48d6da0..6193a11 100644
--- a/internal/server/server.go
+++ b/internal/server/server.go
@@ -70,12 +70,22 @@ func recoverPanic() {
 	}
 }
 
-func dispatchRPC(ty byte, in []byte, conn net.Conn) (*flatbuffers.Builder, error) {
+func dispatchRPC(ty byte, in []byte, conn net.Conn) *flatbuffers.Builder {
+	var err error
+	var bd *flatbuffers.Builder
 	hl, ok := typeHandlerMap[ty]
 	if !ok {
-		return nil, UnknownType{ty}
+		err = UnknownType{ty}
+	} else {
+		bd, err = hl(in, conn)
+	}
+
+	if err != nil {
+		bd = generateErrorReport(err)
+	} else {
+		bd = checkIfDataTooLarge(bd)
 	}
-	return hl(in, conn)
+	return bd
 }
 
 func checkIfDataTooLarge(bd *flatbuffers.Builder) *flatbuffers.Builder {
@@ -116,15 +126,7 @@ func handleConn(c net.Conn) {
 			break
 		}
 
-		bd, err := dispatchRPC(ty, buf, c)
-
-		if err != nil {
-			util.PutBuilder(bd)
-			bd = generateErrorReport(err)
-		} else {
-			bd = checkIfDataTooLarge(bd)
-		}
-
+		bd := dispatchRPC(ty, buf, c)
 		out := bd.FinishedBytes()
 		size := len(out)
 		binary.BigEndian.PutUint32(header, uint32(size))
diff --git a/internal/server/server_test.go b/internal/server/server_test.go
index 606c2cb..9147f75 100644
--- a/internal/server/server_test.go
+++ b/internal/server/server_test.go
@@ -52,8 +52,10 @@ func TestGetConfCacheTTL(t *testing.T) {
 }
 
 func TestDispatchRPC_UnknownType(t *testing.T) {
-	_, err := dispatchRPC(126, []byte(""), nil)
-	assert.Equal(t, UnknownType{126}, err)
+	bd := dispatchRPC(126, []byte(""), nil)
+	err := UnknownType{126}
+	expectBd := ReportError(err)
+	assert.Equal(t, expectBd.FinishedBytes(), bd.FinishedBytes())
 }
 
 func TestDispatchRPC_OutTooLarge(t *testing.T) {