pyrpc: ndr PY_CHECK_TYPE checks for NULL as well as type
authorDouglas Bagnall <douglas.bagnall@catalyst.net.nz>
Tue, 7 May 2019 01:25:01 +0000 (13:25 +1200)
committerDouglas Bagnall <dbagnall@samba.org>
Thu, 9 May 2019 22:39:27 +0000 (22:39 +0000)
Addresses CID 1361477 and others.

Signed-off-by: Douglas Bagnall <douglas.bagnall@catalyst.net.nz>
Reviewed-by: Gary Lockyer <gary@catalyst.net.nz>
source4/librpc/rpc/pyrpc.h

index 968bf863c4c178d1d525db0390ba9242398eb5e2..05c1adb8307498e9fe3848dfd9c66adc89fc90cc 100644 (file)
 #define Py_TYPE(ob)             (((PyObject*)(ob))->ob_type)
 #endif
 
-#define PY_CHECK_TYPE(type, var, fail) \
-       if (!PyObject_TypeCheck(var, type)) {\
-               PyErr_Format(PyExc_TypeError, __location__ ": Expected type '%s' for '%s' of type '%s'", (type)->tp_name, #var, Py_TYPE(var)->tp_name); \
-               fail; \
+#define PY_CHECK_TYPE(type, var, fail)                                 \
+       if (var == NULL) {                                              \
+               PyErr_Format(PyExc_TypeError,                           \
+                            __location__                               \
+                            ": Expected type '%s' for '%s', got NULL", \
+                            (type)->tp_name, #var);                    \
+               fail;                                                   \
+       } else if (!PyObject_TypeCheck(var, type)) {                    \
+               PyErr_Format(PyExc_TypeError,                           \
+                            __location__                               \
+                            ": Expected type '%s' for '%s' of type '%s'", \
+                            (type)->tp_name, #var, Py_TYPE(var)->tp_name); \
+               fail;                                                   \
        }
 
 #define dom_sid0_Type dom_sid_Type