proto: fix race in Merge
Some existing targets (whether correctly or not) rely on it Merge
being safe to call concurrently so long as the set of fields being
merged are disjoint.
Change-Id: I4db9e64efccc7a2d44a5f9b52261b611cce461b0
Reviewed-on: https://go-review.googlesource.com/c/protobuf/+/196737
Reviewed-by: Damien Neil <dneil@google.com>
diff --git a/proto/merge.go b/proto/merge.go
index 45bfc9b..e1fb6b8 100644
--- a/proto/merge.go
+++ b/proto/merge.go
@@ -39,7 +39,9 @@
return true
})
- dst.SetUnknown(append(dst.GetUnknown(), src.GetUnknown()...))
+ if len(src.GetUnknown()) > 0 {
+ dst.SetUnknown(append(dst.GetUnknown(), src.GetUnknown()...))
+ }
}
func mergeList(dst, src protoreflect.List, fd protoreflect.FieldDescriptor) {