--- resource.orig.c 2009-05-22 00:48:39.000000000 -0700 +++ resource.c 2009-05-22 00:52:01.000000000 -0700 @@ -157,21 +157,32 @@ return NULL; } + Py_INCREF(curobj); + Py_INCREF(maxobj); + #if !defined(HAVE_LARGEFILE_SUPPORT) rl.rlim_cur = PyInt_AsLong(curobj); - if (rl.rlim_cur == -1 && PyErr_Occurred()) + Py_DECREF(curobj); + if (rl.rlim_cur == -1 && PyErr_Occurred()) { + Py_DECREF(maxobj); return NULL; + } rl.rlim_max = PyInt_AsLong(maxobj); + Py_DECREF(maxobj); if (rl.rlim_max == -1 && PyErr_Occurred()) return NULL; #else /* The limits are probably bigger than a long */ rl.rlim_cur = PyLong_Check(curobj) ? PyLong_AsLongLong(curobj) : PyInt_AsLong(curobj); - if (rl.rlim_cur == -1 && PyErr_Occurred()) + Py_DECREF(curobj); + if (rl.rlim_cur == -1 && PyErr_Occurred()) { + Py_DECREF(maxobj); return NULL; + } rl.rlim_max = PyLong_Check(maxobj) ? PyLong_AsLongLong(maxobj) : PyInt_AsLong(maxobj); + Py_DECREF(maxobj); if (rl.rlim_max == -1 && PyErr_Occurred()) return NULL; #endif