pyldb: check for errors in PyLdb_GetPyType()
authorDouglas Bagnall <douglas.bagnall@catalyst.net.nz>
Wed, 2 May 2018 23:17:55 +0000 (11:17 +1200)
committerDouglas Bagnall <dbagnall@samba.org>
Wed, 10 Jul 2019 04:32:13 +0000 (04:32 +0000)
Signed-off-by: Douglas Bagnall <douglas.bagnall@catalyst.net.nz>
Reviewed-by: Gary Lockyer <gary@catalyst.net.nz>
lib/ldb/pyldb_util.c
selftest/knownfail.d/python-segfaults

index a1e3233e6ba408c0d3d7dba762cd06dd0b9da71e..811511547edca47524817a912f3aa66cfb750ca5 100644 (file)
@@ -34,7 +34,8 @@ static PyObject *ldb_module = NULL;
  */
 static PyTypeObject * PyLdb_GetPyType(const char *typename)
 {
-       PyObject *py_obj = NULL;
+       PyTypeObject *type = NULL;
+       bool ok;
 
        if (ldb_module == NULL) {
                ldb_module = PyImport_ImportModule("ldb");
@@ -43,9 +44,26 @@ static PyTypeObject * PyLdb_GetPyType(const char *typename)
                }
        }
 
-       py_obj = PyObject_GetAttrString(ldb_module, typename);
+       type = (PyTypeObject *)PyObject_GetAttrString(ldb_module, typename);
 
-       return (PyTypeObject*)py_obj;
+
+       if (type == NULL) {
+               PyErr_Format(PyExc_NameError,
+                            "Unable to find type %s in ldb module",
+                            typename);
+               return NULL;
+       }
+
+       ok = PyType_Check(type);
+       if (! ok) {
+               PyErr_Format(PyExc_TypeError,
+                            "Expected type ldb.%s, not %s",
+                            typename, Py_TYPE(type)->tp_name);
+               Py_DECREF(type);
+               return NULL;
+       }
+
+       return type;
 }
 
 bool pyldb_check_type(PyObject *obj, const char *typename)
index c8331d941ef3745e8c980e56fb43e1f64ea956a1..42f83f8b8b9c6cf729a54736d9baa72b469c06ea 100644 (file)
@@ -1,6 +1,4 @@
-samba.tests.segfault.samba.tests.segfault.SegfaultTests.test_auth_user_session
 samba.tests.segfault.samba.tests.segfault.SegfaultTests.test_encrypt_netr_crypt_password
 samba.tests.segfault.samba.tests.segfault.SegfaultTests.test_hive_open_ldb
 samba.tests.segfault.samba.tests.segfault.SegfaultTests.test_net_replicate_chunk_1
-samba.tests.segfault.samba.tests.segfault.SegfaultTests.test_net_replicate_init__1
 samba.tests.segfault.samba.tests.segfault.SegfaultTests.test_net_replicate_init__3