upb: fix NULL pointer bug in Python FFI

Reference: https://github.com/protocolbuffers/protobuf/issues/10208
PiperOrigin-RevId: 460623221
pull/13171/head
Eric Salo 2 years ago committed by Copybara-Service
parent 9b3e87307d
commit c2c6427f60
  1. 21
      python/message.c

@ -556,6 +556,21 @@ static PyObject* PyUpb_Message_NewStub(PyObject* parent, const upb_FieldDef* f,
return &msg->ob_base;
}
static bool PyUpb_Message_IsEmpty(const upb_Message* msg,
const upb_MessageDef* m,
const upb_DefPool* ext_pool) {
if (!msg) return true;
size_t iter = kUpb_Message_Begin;
const upb_FieldDef* f;
upb_MessageValue val;
if (upb_Message_Next(msg, m, ext_pool, &f, &val, &iter)) return false;
size_t len;
(void)upb_Message_GetUnknown(msg, &len);
return len == 0;
}
static bool PyUpb_Message_IsEqual(PyUpb_Message* m1, PyObject* _m2) {
PyUpb_Message* m2 = (void*)_m2;
if (m1 == m2) return true;
@ -569,6 +584,12 @@ static bool PyUpb_Message_IsEqual(PyUpb_Message* m1, PyObject* _m2) {
#endif
const upb_Message* m1_msg = PyUpb_Message_GetIfReified((PyObject*)m1);
const upb_Message* m2_msg = PyUpb_Message_GetIfReified(_m2);
const upb_DefPool* symtab = upb_FileDef_Pool(upb_MessageDef_File(m1_msgdef));
const bool e1 = PyUpb_Message_IsEmpty(m1_msg, m1_msgdef, symtab);
const bool e2 = PyUpb_Message_IsEmpty(m2_msg, m1_msgdef, symtab);
if (e1 || e2) return e1 && e2;
return upb_Message_IsEqual(m1_msg, m2_msg, m1_msgdef);
}

Loading…
Cancel
Save