Test part: upb CopyFrom the default empty message should just clear instead of deep copy
from memory
fix https://github.com/protocolbuffers/protobuf/issues/13485
PiperOrigin-RevId: 559888172
diff --git a/protobuf_deps.bzl b/protobuf_deps.bzl
index 5fbbf07..5dba70a 100644
--- a/protobuf_deps.bzl
+++ b/protobuf_deps.bzl
@@ -150,6 +150,6 @@
_github_archive(
name = "upb",
repo = "https://github.com/protocolbuffers/upb",
- commit = "823a12e80934f9c8fb9178191d69f06a1bbfd604",
- sha256 = "165f425714d32018a1a856b1935cfa24206878f8a469384808d2dce1d7c4003a",
+ commit = "57636ce03ac1e2aab3a362a61a6664981e21cda5",
+ sha256 = "75da534db927e165cb550d232c35e2dec4b5153b3b47989b250d75febbfc1710",
)
diff --git a/python/google/protobuf/internal/message_test.py b/python/google/protobuf/internal/message_test.py
index f75fbde..6cf89e8 100755
--- a/python/google/protobuf/internal/message_test.py
+++ b/python/google/protobuf/internal/message_test.py
@@ -422,6 +422,22 @@
empty.ParseFromString(populated.SerializeToString())
self.assertEqual(str(empty), '')
+ def testCopyFromEmpty(self, message_module):
+ msg = message_module.NestedTestAllTypes()
+ test_msg = message_module.NestedTestAllTypes()
+ test_util.SetAllFields(test_msg.payload)
+ self.assertTrue(test_msg.HasField('payload'))
+ # Copy from empty message
+ test_msg.CopyFrom(msg)
+ self.assertEqual(0, len(test_msg.ListFields()))
+
+ test_util.SetAllFields(test_msg.payload)
+ self.assertTrue(test_msg.HasField('payload'))
+ # Copy from a non exist message
+ test_msg.CopyFrom(msg.child)
+ self.assertFalse(test_msg.HasField('payload'))
+ self.assertEqual(0, len(test_msg.ListFields()))
+
def testAppendRepeatedCompositeField(self, message_module):
msg = message_module.TestAllTypes()
msg.repeated_nested_message.append(