On Fri, Dec 24, 2021 at 11:28:12AM +0100, Luca Weiss wrote: > Fatal Python error: none_dealloc: deallocating None > Python runtime state: finalizing (tstate=0x000055c9bac70920) > > Current thread 0x00007fbe34e47740 (most recent call first): > <no Python frame> > Aborted (core dumped) > > This is caused by a missing Py_INCREF on the returned Py_None, as > demonstrated e.g. in https://github.com/mythosil/swig-python-incref or > described at https://edcjones.tripod.com/refcount.html ("Remember to > INCREF Py_None!") > > A PoC for triggering this crash is uploaded to > https://github.com/z3ntu/pylibfdt-crash . > With this patch applied to pylibfdt the crash does not happen. Any chance you could rework your testcase into the libfdt testsuite (make check)? > Signed-off-by: Luca Weiss <luca@xxxxxxxxx> > --- > Unrelated but I've noticed that in this file the indentation is quite > mixed between spaces and tabs. This patch tries to keep to the style in > the lines around. > > pylibfdt/libfdt.i | 6 ++++-- > 1 file changed, 4 insertions(+), 2 deletions(-) > > diff --git a/pylibfdt/libfdt.i b/pylibfdt/libfdt.i > index 075ef70..9ccc57b 100644 > --- a/pylibfdt/libfdt.i > +++ b/pylibfdt/libfdt.i > @@ -1040,14 +1040,16 @@ typedef uint32_t fdt32_t; > > /* typemap used for fdt_getprop() */ > %typemap(out) (const void *) { > - if (!$1) > + if (!$1) { > $result = Py_None; > - else > + Py_INCREF($result); > + } else { > %#if PY_VERSION_HEX >= 0x03000000 > $result = Py_BuildValue("y#", $1, (Py_ssize_t)*arg4); > %#else > $result = Py_BuildValue("s#", $1, (Py_ssize_t)*arg4); > %#endif > + } > } > > /* typemap used for fdt_setprop() */ -- David Gibson | I'll have my music baroque, and my code david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_ | _way_ _around_! http://www.ozlabs.org/~dgibson
Attachment:
signature.asc
Description: PGP signature