Skip to content

Commit ca5ca62

Browse files
habermancopybara-github
authored andcommitted
Fixed a bug when deep copying a map field with a closed enum value.
PiperOrigin-RevId: 601195914
1 parent 21eb4e9 commit ca5ca62

2 files changed

Lines changed: 8 additions & 3 deletions

File tree

python/google/protobuf/internal/message_test.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1406,6 +1406,12 @@ def testUnknownEnumMap(self):
14061406
with self.assertRaises(ValueError):
14071407
m.unknown_map_field[1] = 123
14081408

1409+
def testDeepCopyClosedEnum(self):
1410+
m = map_proto2_unittest_pb2.TestEnumMap()
1411+
m.known_map_field[123] = 0
1412+
m2 = copy.deepcopy(m)
1413+
self.assertEqual(m, m2)
1414+
14091415
def testExtensionsErrors(self):
14101416
msg = unittest_pb2.TestAllTypes()
14111417
self.assertRaises(AttributeError, getattr, msg, 'Extensions')

upb/message/copy.c

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ upb_Map* upb_Map_DeepClone(const upb_Map* map, upb_CType key_type,
9898
const upb_MiniTableField* value_field =
9999
&map_entry_table->UPB_PRIVATE(fields)[1];
100100
const upb_MiniTable* value_sub =
101-
(value_field->UPB_PRIVATE(submsg_index) != kUpb_NoSub)
101+
upb_MiniTableField_CType(value_field) == kUpb_CType_Message
102102
? upb_MiniTable_GetSubMessageTable(map_entry_table, value_field)
103103
: NULL;
104104
upb_CType value_field_type = upb_MiniTableField_CType(value_field);
@@ -165,8 +165,7 @@ static bool upb_Message_Array_DeepClone(const upb_Array* array,
165165
UPB_PRIVATE(_upb_MiniTableField_CheckIsArray)(field);
166166
upb_Array* cloned_array = upb_Array_DeepClone(
167167
array, upb_MiniTableField_CType(field),
168-
upb_MiniTableField_CType(field) == kUpb_CType_Message &&
169-
field->UPB_PRIVATE(submsg_index) != kUpb_NoSub
168+
upb_MiniTableField_CType(field) == kUpb_CType_Message
170169
? upb_MiniTable_GetSubMessageTable(mini_table, field)
171170
: NULL,
172171
arena);

0 commit comments

Comments
 (0)