utils.c: Raise exceptions from `convTHING' with null arguments.
authorMark Wooding <mdw@distorted.org.uk>
Thu, 11 May 2017 09:42:15 +0000 (10:42 +0100)
committerMark Wooding <mdw@distorted.org.uk>
Sun, 14 May 2017 03:29:20 +0000 (04:29 +0100)
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.

util.c

diff --git a/util.c b/util.c
index d4b7fb0..7118bfb 100644 (file)
--- a/util.c
+++ b/util.c
@@ -133,6 +133,7 @@ int convk64(PyObject *o, void *pp)
   int rc = 0;
   uint32 lo, hi;
 
+  if (!o) VALERR("can't delete");
   if (init_i32()) goto end;
   if ((i = PyNumber_Int(o)) == 0) goto end;
   lo = PyInt_AsUnsignedLongMask(i);