fix(maputil): prevent nil value overwrite (#1755)

Signed-off-by: zhengbayi <ban11111@qq.com>
Co-authored-by: zhengbayi <zhengbaiyi@sensetime.com>
This commit is contained in:
zebreay 2024-10-25 20:52:05 +08:00 committed by GitHub
parent d1416ec7b4
commit 5837672bfa
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 20 additions and 0 deletions

View File

@ -231,6 +231,9 @@ func MergeMaps(a, b map[string]interface{}) map[string]interface{} {
out[k] = v
}
for k, v := range b {
if v == nil {
continue
}
if v, ok := v.(map[string]interface{}); ok {
if bv, ok := out[k]; ok {
if bv, ok := bv.(map[string]interface{}); ok {

View File

@ -215,6 +215,10 @@ func TestMapUtil_MergeMaps(t *testing.T) {
"app1": 3,
},
}
map5 := map[string]interface{}{
"logLevel": "error",
"replicaCount": nil,
}
testMap := MergeMaps(map2, map4)
equal := reflect.DeepEqual(testMap, map4)
@ -247,4 +251,17 @@ func TestMapUtil_MergeMaps(t *testing.T) {
if !equal {
t.Errorf("Expected a map with different keys to merge properly with another map. Expected: %v, got %v", expectedMap, testMap)
}
testMap = MergeMaps(map3, map5)
expectedMap = map[string]interface{}{
"logLevel": "error",
"replicaCount": map[string]any{
"app1": 3,
"awesome": 4,
},
}
equal = reflect.DeepEqual(testMap, expectedMap)
if !equal {
t.Errorf("Expected a map with empty value not to overwrite another map's value. Expected: %v, got %v", expectedMap, testMap)
}
}