pyldb: Prevent segfault when first module is NULL
authorPetr Viktorin <pviktori@redhat.com>
Fri, 21 Aug 2015 08:07:17 +0000 (10:07 +0200)
committerStefan Metzmacher <metze@samba.org>
Thu, 5 Nov 2015 17:04:24 +0000 (18:04 +0100)
Signed-off-by: Petr Viktorin <pviktori@redhat.com>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
Reviewed-by: Stefan Metzmacher <metze@samba.org>
lib/ldb/pyldb.c
lib/ldb/tests/python/api.py

index ba7186036f73c86bb84b67e2eed51691da9c77d3..efb95f5034355c7a08679ea7f9ef315ba22110d9 100644 (file)
@@ -2045,7 +2045,11 @@ static PyObject *PyLdbModule_FromModule(struct ldb_module *mod)
 
 static PyObject *py_ldb_get_firstmodule(PyLdbObject *self, void *closure)
 {
-       return PyLdbModule_FromModule(pyldb_Ldb_AsLdbContext(self)->modules);
+       struct ldb_module *mod = pyldb_Ldb_AsLdbContext(self)->modules;
+       if (mod == NULL) {
+               Py_RETURN_NONE;
+       }
+       return PyLdbModule_FromModule(mod);
 }
 
 static PyGetSetDef py_ldb_getset[] = {
index 2d9537fc2eb88242d2a573a9789abb76edbaf3a5..a46c1ae1bff51813bccf2129ebe6285d85e4d380 100755 (executable)
@@ -70,6 +70,15 @@ class SimpleLdb(TestCase):
         x = ldb.Ldb(filename())
         self.assertEqual("[<ldb module 'tdb'>]", repr(x.modules()))
 
+    def test_firstmodule_none(self):
+        x = ldb.Ldb()
+        self.assertEqual(x.firstmodule, None)
+
+    def test_firstmodule_tdb(self):
+        x = ldb.Ldb(filename())
+        mod = x.firstmodule
+        self.assertEqual(repr(mod), "<ldb module 'tdb'>")
+
     def test_search(self):
         l = ldb.Ldb(filename())
         self.assertEqual(len(l.search()), 0)