talloc: add pytalloc_get_name() helper
authorDouglas Bagnall <douglas.bagnall@catalyst.net.nz>
Tue, 9 Jul 2019 08:59:19 +0000 (08:59 +0000)
committerAndrew Bartlett <abartlet@samba.org>
Mon, 22 Jul 2019 22:20:25 +0000 (22:20 +0000)
In several places we go

   talloc_get_name(pytalloc_get_ptr(py_obj))

which is a certain NULL derefernce if py_obj is not a talloc object.

This is a helper function that chooses to say "non-talloc object"
rather than crash.

Signed-off-by: Douglas Bagnall <douglas.bagnall@catalyst.net.nz>
Reviewed-by: Gary Lockyer <gary@catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
lib/talloc/pytalloc.h
lib/talloc/pytalloc_util.c

index 7db6c33cf014a147429b78dc996586b389983454..8ab1e16fe4773d502be153b988310017a326ed21 100644 (file)
@@ -54,6 +54,10 @@ void *_pytalloc_get_ptr(PyObject *py_obj);
 TALLOC_CTX *_pytalloc_get_mem_ctx(PyObject *py_obj);
 #define pytalloc_get_mem_ctx(py_obj) _pytalloc_get_mem_ctx((PyObject *)(py_obj))
 
+const char *_pytalloc_get_name(PyObject *py_obj);
+#define pytalloc_get_name(py_obj) _pytalloc_get_name((PyObject *)(py_obj))
+
+
 PyObject *pytalloc_steal_ex(PyTypeObject *py_type, TALLOC_CTX *mem_ctx, void *ptr);
 PyObject *pytalloc_steal(PyTypeObject *py_type, void *ptr);
 PyObject *pytalloc_reference_ex(PyTypeObject *py_type, TALLOC_CTX *mem_ctx, void *ptr);
index 7a426d6c2a60cc1ed365a40cf15b78f6fba687b5..82b95e7f144fec1f60aa032172e61ca22481c666 100644 (file)
@@ -331,3 +331,12 @@ _PUBLIC_ int pytalloc_BaseObject_PyType_Ready(PyTypeObject *type)
 
        return PyType_Ready(type);
 }
+
+_PUBLIC_ const char *_pytalloc_get_name(PyObject *obj)
+{
+       void *ptr = pytalloc_get_ptr(obj);
+       if (ptr == NULL) {
+               return "non-talloc object";
+       }
+       return talloc_get_name(ptr);
+}