You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@devlake.apache.org by zh...@apache.org on 2023/05/23 07:30:01 UTC

[incubator-devlake] branch release-v0.17 updated: chore: cherry-pick#5244#5256 to release-v0.17 (#5261)

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

zhangliang2022 pushed a commit to branch release-v0.17
in repository https://gitbox.apache.org/repos/asf/incubator-devlake.git


The following commit(s) were added to refs/heads/release-v0.17 by this push:
     new 7486927f7 chore: cherry-pick#5244#5256 to release-v0.17 (#5261)
7486927f7 is described below

commit 7486927f7009e2df02a943c08ad04024ac52274a
Author: Liang Zhang <li...@merico.dev>
AuthorDate: Tue May 23 15:29:56 2023 +0800

    chore: cherry-pick#5244#5256 to release-v0.17 (#5261)
---
 backend/helpers/pluginhelper/api/batch_save.go     | 11 ++++
 .../helpers/pluginhelper/api/batch_save_test.go    | 68 ++++++++++++++++++++++
 2 files changed, 79 insertions(+)

diff --git a/backend/helpers/pluginhelper/api/batch_save.go b/backend/helpers/pluginhelper/api/batch_save.go
index 7cf57c254..a87748e32 100644
--- a/backend/helpers/pluginhelper/api/batch_save.go
+++ b/backend/helpers/pluginhelper/api/batch_save.go
@@ -83,6 +83,7 @@ func (c *BatchSave) Add(slot interface{}) errors.Error {
 	if reflect.ValueOf(slot).Kind() != reflect.Ptr {
 		return errors.Default.New("slot is not a pointer")
 	}
+	stripZeroByte(slot)
 	// deduplication
 	key := getKeyValue(slot, c.primaryKey)
 
@@ -147,3 +148,13 @@ func getKeyValue(iface interface{}, primaryKey []reflect.StructField) string {
 	}
 	return strings.Join(ss, ":")
 }
+
+func stripZeroByte(ifc interface{}) {
+	v := reflect.ValueOf(ifc).Elem()
+	for i := 0; i < v.NumField(); i++ {
+		if v.Field(i).Type() == reflect.TypeOf("") {
+			stripped := strings.ReplaceAll(v.Field(i).String(), "\u0000", "")
+			v.Field(i).Set(reflect.ValueOf(stripped))
+		}
+	}
+}
diff --git a/backend/helpers/pluginhelper/api/batch_save_test.go b/backend/helpers/pluginhelper/api/batch_save_test.go
new file mode 100644
index 000000000..d4a86c2d6
--- /dev/null
+++ b/backend/helpers/pluginhelper/api/batch_save_test.go
@@ -0,0 +1,68 @@
+/*
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements.  See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package api
+
+import (
+	"testing"
+)
+
+func Test_stripZeroByte(t *testing.T) {
+	type foo struct {
+		Field      string
+		FromString string
+		ToString   string
+		From       *string
+	}
+	from := "Earth\u0000"
+	type args struct {
+		ifc interface{}
+	}
+	tests := []struct {
+		name string
+		args args
+	}{
+		{
+			name: "Test_stripZeroByte",
+			args: args{
+				ifc: &foo{
+					Field:      "home\u0000",
+					FromString: "Earth",
+					ToString:   "Mars\u0000",
+					From:       &from,
+				},
+			},
+		},
+	}
+	for _, tt := range tests {
+		t.Run(tt.name, func(t *testing.T) {
+			stripZeroByte(tt.args.ifc)
+			if tt.args.ifc.(*foo).Field != "home" {
+				t.Errorf("stripZeroByte() = %v, want %v", tt.args.ifc.(*foo).Field, "home")
+			}
+			if tt.args.ifc.(*foo).FromString != "Earth" {
+				t.Errorf("stripZeroByte() = %v, want %v", tt.args.ifc.(*foo).FromString, "Earth")
+			}
+			if tt.args.ifc.(*foo).ToString != "Mars" {
+				t.Errorf("stripZeroByte() = %v, want %v", tt.args.ifc.(*foo).ToString, "Mars")
+			}
+			if *tt.args.ifc.(*foo).From != from {
+				t.Errorf("stripZeroByte() = %v, want %v", *tt.args.ifc.(*foo).From, "Earth")
+			}
+		})
+	}
+}