From 8d6f8df1ec57faf2c354e6bf1cdcd1f1d1e8ee68 Mon Sep 17 00:00:00 2001 From: Josh Kelley Date: Fri, 5 Oct 2018 14:07:55 -0400 Subject: [PATCH] ParseFromString returns bytes parsed (#5166) * ParseFromString returns bytes parsed ParseFromString is documented as returning the number of bytes parsed, and the C++ implementation does this, so the Python implementation should too. See #5165. * Fix docstring * Add a test for ParseFromString length behavior --- python/google/protobuf/internal/message_test.py | 3 ++- python/google/protobuf/message.py | 5 ++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/python/google/protobuf/internal/message_test.py b/python/google/protobuf/internal/message_test.py index 4dd1104a2f..d733dc8af7 100755 --- a/python/google/protobuf/internal/message_test.py +++ b/python/google/protobuf/internal/message_test.py @@ -139,9 +139,10 @@ class MessageTest(BaseTestCase): def testGoldenPackedMessage(self, message_module): golden_data = test_util.GoldenFileData('golden_packed_fields_message') golden_message = message_module.TestPackedTypes() - golden_message.ParseFromString(golden_data) + parsed_bytes = golden_message.ParseFromString(golden_data) all_set = message_module.TestPackedTypes() test_util.SetAllPackedFields(all_set) + self.assertEqual(parsed_bytes, len(golden_data)) self.assertEqual(all_set, golden_message) self.assertEqual(golden_data, all_set.SerializeToString()) golden_copy = copy.deepcopy(golden_message) diff --git a/python/google/protobuf/message.py b/python/google/protobuf/message.py index eca2e0a901..2f89857c85 100755 --- a/python/google/protobuf/message.py +++ b/python/google/protobuf/message.py @@ -178,11 +178,10 @@ class Message(object): def ParseFromString(self, serialized): """Parse serialized protocol buffer data into this message. - Like MergeFromString(), except we clear the object first and - do not return the value that MergeFromString returns. + Like MergeFromString(), except we clear the object first. """ self.Clear() - self.MergeFromString(serialized) + return self.MergeFromString(serialized) def SerializeToString(self, **kwargs): """Serializes the protocol message to a binary string.