Skip to content

Commit da04261

Browse files
anandoleecopybara-github
authored andcommitted
Fix segment fault for UPB Pyhon 'in' method of empty repeated extensions
PiperOrigin-RevId: 741359924
1 parent 038aaa9 commit da04261

File tree

2 files changed

+8
-0
lines changed

2 files changed

+8
-0
lines changed

python/extension_dict.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ static int PyUpb_ExtensionDict_Contains(PyObject* _self, PyObject* key) {
101101
if (!msg) return 0;
102102
if (upb_FieldDef_IsRepeated(f)) {
103103
upb_MessageValue val = upb_Message_GetFieldByDef(msg, f);
104+
if (!val.array_val) return 0;
104105
return upb_Array_Size(val.array_val) > 0;
105106
} else {
106107
return upb_Message_HasFieldByDef(msg, f);

python/google/protobuf/internal/reflection_test.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1902,6 +1902,13 @@ def testMergeFromExtensionsNestedMessage(self):
19021902
self.assertEqual(222, ext2[1].bb)
19031903
self.assertEqual(333, ext2[2].bb)
19041904

1905+
def testRepeatedExtensionsIn(self):
1906+
msg = more_extensions_pb2.ExtendedMessage()
1907+
ext = more_extensions_pb2.repeated_int_extension
1908+
self.assertNotIn(ext, msg.Extensions)
1909+
msg.Extensions[ext].append(123)
1910+
self.assertIn(ext, msg.Extensions)
1911+
19051912
def testCopyFromBadType(self):
19061913
proto1 = unittest_pb2.TestAllTypes()
19071914
proto2 = unittest_pb2.TestAllExtensions()

0 commit comments

Comments
 (0)