-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Dear Inline::Python maintainers,
Inline::Python 0.22 no longer passes its test suite on Linux i386 under Ubuntu Feisty (Perl 5.8.8, Python 1.5.2 - Edgy works fine). The problem seems to stem from an API change in Python at or about version 1.5.2: according to http://mail.python.org/pipermail/python-bugs-list/2000-April/000709.html it is not kosher (anymore?) to allocate stuff with PyObject_NEW and free it with PyMem_DEL. The attached patch: * fixes an (unrelated) off-by-one malloc error in special_perl_use; * replaces all occurences of PyMem_DEL with PyObject_FREE and causes the test suite to succeed again. Disclaimer: I am *not* a Python guy. The PyObject_FREE is just my uneducated guess, and I'm not positive it is the Right Thing (in particular, I didn't check for leaks in my Inline::Python so patched). FWIW according to http://www.google.com/codesearch PyObject_FREE has been around for ages, so hopefully my patch doesn't break backwards compatibility. Please apply. Oh, and cheers for your great work on Inline::Python! - -- << Tout n'y est pas parfait, mais on y honore certainement les jardiniers >> Dominique Quatravaux <[EMAIL PROTECTED]> -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.6 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iQCVAwUBRjIqM/TYH7KfeIIFAQIDJQQAvWNYmEc8JCT+RRikrEWxkqFAp4ZlGUjV lFD4OIuziVmT6Ygkyv58ieLFHFdh4z4RKg5Y5vu0+TC+54UefFG6ST5CyzbyMDkV iuPyzMdm3q5HSHm6GgXthTsNqE81w9ub3xMxXVIFbTHTybd4aBK36Mkhf7qjvvjz DGZ9JPWmqUk= =9Jrz -----END PGP SIGNATURE-----
=== perlmodule.c ================================================================== --- perlmodule.c (/upstream) (revision 2) +++ perlmodule.c (/work/malloc-issues) (local) @@ -86,7 +86,7 @@ Py_XDECREF(self->pkg); Py_XDECREF(self->base); Py_XDECREF(self->full); - PyMem_DEL(self); + PyObject_FREE(self); } static PyObject * @@ -205,7 +205,7 @@ if (self->obj) SvREFCNT_dec(self->obj); - PyMem_DEL(self); + PyObject_FREE(self); } static PyObject * @@ -359,7 +359,7 @@ if (self->obj) SvREFCNT_dec(self->obj); if (self->ref) SvREFCNT_dec(self->ref); - PyMem_DEL(self); + PyObject_FREE(self); } static PyObject * @@ -599,17 +599,18 @@ static PyObject * special_perl_use(PyObject *ignored, PyObject *args) { PyObject *s = PyTuple_GetItem(args, 0); - char *str; + char *str, *usewhat; if(!PyString_Check(s)) { return NULL; } - Printf(("calling use...'%s'\n", PyString_AsString(s))); + usewhat = PyString_AsString(s); + Printf(("calling use...'%s'\n", usewhat)); str = malloc((strlen("use ") - + PyObject_Length(s)) * sizeof(char)); - sprintf(str, "use %s", PyString_AsString(s)); + + strlen(usewhat) + 1) * sizeof(char)); + sprintf(str, "use %s", usewhat); Printf(("eval-ing now!\n")); perl_eval_pv(str, TRUE);