From: Mark Wooding Date: Thu, 11 May 2017 09:42:15 +0000 (+0100) Subject: utils.c: Raise exceptions from `convTHING' with null arguments. X-Git-Tag: 1.1.2~4 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/catacomb-python/commitdiff_plain/8c45178c90702f4ca299ce942804bfed11b2345f utils.c: Raise exceptions from `convTHING' with null arguments. This can happen as a result of using `convTHING' in an attribute `set' function, and the Python program trying to `del' the attribute. Unfortunately, these conversion functions are already being used in this context, and it leads to segfaults, e.g., from del C.Key(C.KeyFile('', C.KOPEN_WRITE | C.KOPEN_NOFILE), 0, 'k').exptime Easy fix. --- diff --git a/util.c b/util.c index ed56e99..8fab0bf 100644 --- a/util.c +++ b/util.c @@ -60,6 +60,7 @@ int convulong(PyObject *o, void *pp) unsigned long *p = pp; PyObject *t; + if (!o) VALERR("can't delete"); if (PyInt_Check(o)) { i = PyInt_AS_LONG(o); if (i < 0) VALERR("must be nonnegative"); @@ -131,8 +132,11 @@ end: int convbool(PyObject *o, void *pp) { + if (!o) VALERR("can't delete"); *(int *)pp = PyObject_IsTrue(o); return (1); +end: + return (0); } /*----- Type messing ------------------------------------------------------*/