From 32a5eb55f541e6cfb841e20caccf4f77f9cc7a6e Mon Sep 17 00:00:00 2001 From: Oleksii Shevchuk Date: Sat, 13 Jan 2018 11:16:57 +0200 Subject: [PATCH] Manage refcnt for module dicts properly --- client/sources-linux/pupy.c | 3 +-- client/sources/pupy.c | 17 +++++++++++++---- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/client/sources-linux/pupy.c b/client/sources-linux/pupy.c index 4b8c6388..343e8cb0 100644 --- a/client/sources-linux/pupy.c +++ b/client/sources-linux/pupy.c @@ -45,10 +45,9 @@ static PyObject *Py_get_modules(PyObject *self, PyObject *args) munmap((char *) library_c_start, library_c_size); - - Py_XINCREF(modules); } + Py_INCREF(modules); return modules; } diff --git a/client/sources/pupy.c b/client/sources/pupy.c index 4c61be9b..52042f60 100644 --- a/client/sources/pupy.c +++ b/client/sources/pupy.c @@ -8,6 +8,7 @@ #include #include "MyLoadLibrary.h" #include "base_inject.h" + static char module_doc[] = "Builtins utilities for pupy"; #ifndef UINTPTR @@ -60,10 +61,18 @@ static PyObject *Py_set_exit_session_callback(PyObject *self, PyObject *args) static PyObject *Py_get_modules(PyObject *self, PyObject *args) { - return PyObject_lzmaunpack( - library_c_start, - library_c_size - ); + static PyObject *modules = NULL; + if (!modules) { + int rc; + + modules = PyObject_lzmaunpack( + library_c_start, + library_c_size + ); + } + + Py_INCREF(modules); + return modules; } static PyObject *