From 5ae371162d9d2289fa02ae98bb1feebf3b85894d Mon Sep 17 00:00:00 2001 From: Joshua Haberman Date: Tue, 17 May 2022 10:03:01 -0700 Subject: [PATCH] Fixed two reference leaks in unknown field processing. PiperOrigin-RevId: 449248186 --- python/pb_unit_tests/descriptor_pool_test_wrapper.py | 1 - python/unknown_fields.c | 3 +++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/python/pb_unit_tests/descriptor_pool_test_wrapper.py b/python/pb_unit_tests/descriptor_pool_test_wrapper.py index ee95d6f800..ea4b27332d 100644 --- a/python/pb_unit_tests/descriptor_pool_test_wrapper.py +++ b/python/pb_unit_tests/descriptor_pool_test_wrapper.py @@ -38,7 +38,6 @@ if __name__ == '__main__': # end:github_only # begin:google_only -# CreateDescriptorPoolTest.testComplexNestingWithProtoFileParser.__unittest_expecting_failure__ = True # from absl import app # if __name__ == '__main__': # app.run(lambda argv: unittest.main(verbosity=2)) diff --git a/python/unknown_fields.c b/python/unknown_fields.c index f0210344d2..50a67f943a 100644 --- a/python/unknown_fields.c +++ b/python/unknown_fields.c @@ -184,7 +184,9 @@ done: if (type_id && msg) { PyObject* field = PyObject_CallFunction( s->unknown_field_type, "iiO", type_id, kUpb_WireType_Delimited, msg); + if (!field) goto err; PyList_Append(self->fields, field); + Py_DECREF(field); } Py_XDECREF(msg); return ptr; @@ -293,6 +295,7 @@ static const char* PyUpb_UnknownFieldSet_Build(PyUpb_UnknownFieldSet* self, PyObject* field = PyObject_CallFunction(s->unknown_field_type, "iiN", field_number, wire_type, data); PyList_Append(self->fields, field); + Py_DECREF(field); } return ptr;