From de295e46321bc1cd3bfa3fd049d3cdda96405756 Mon Sep 17 00:00:00 2001 From: Alexandre Duret-Lutz Date: Mon, 31 Jan 2022 10:08:47 +0100 Subject: [PATCH] python: fix a memory leak in all added __iter__ methods Reported by Yechuan Xia * python/spot/impl.i: Add %newobject to all __iter__ methods. * NEWS: Mention the list of affected methods. * THANKS: Update. --- NEWS | 8 +++++++- THANKS | 1 + python/spot/impl.i | 9 +++++++++ 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/NEWS b/NEWS index 3175ee43f..e7fcd8f4b 100644 --- a/NEWS +++ b/NEWS @@ -1,6 +1,12 @@ New in spot 2.10.3.dev (net yet released) - Nothing yet. + Bugs fixed: + + - Fix memory leaks in Python bindings for several iteration objects. + This occured while itering on twa_graph.out(), twa_graph.edges(), + twa_graph.univ_dests(), kripke_graph.out(), kripke_graph.edges(), + mark_t.sets(), scc_info.edges_of(), scc_info.inner_edges_of(), and + on an scc_info instance. New in spot 2.10.3 (2022-01-15) diff --git a/THANKS b/THANKS index c526bf75e..193dccaf7 100644 --- a/THANKS +++ b/THANKS @@ -57,5 +57,6 @@ Victor Khomenko Vitus Lam Yann Thierry-Mieg Yannick Molinghen +Yechuan Xia Yong Li Yuri Victorovich diff --git a/python/spot/impl.i b/python/spot/impl.i index 67d29ea09..12cae6311 100644 --- a/python/spot/impl.i +++ b/python/spot/impl.i @@ -1012,6 +1012,7 @@ static void* ptr_for_bdddict(PyObject* obj) } %extend spot::internal::state_out> { + %newobject __iter__(PyObject **PYTHON_SELF); swig::SwigPyIterator* __iter__(PyObject **PYTHON_SELF) { return swig::make_forward_iterator(self->begin(), self->begin(), @@ -1020,6 +1021,7 @@ static void* ptr_for_bdddict(PyObject* obj) } %extend spot::internal::state_out> { + %newobject __iter__(PyObject **PYTHON_SELF); swig::SwigPyIterator* __iter__(PyObject **PYTHON_SELF) { return swig::make_forward_iterator(self->begin(), self->begin(), @@ -1045,6 +1047,7 @@ static void* ptr_for_bdddict(PyObject* obj) } %extend spot::internal::all_trans> { + %newobject __iter__(PyObject **PYTHON_SELF); swig::SwigPyIterator* __iter__(PyObject **PYTHON_SELF) { return swig::make_forward_iterator(self->begin(), self->begin(), @@ -1053,6 +1056,7 @@ static void* ptr_for_bdddict(PyObject* obj) } %extend spot::internal::all_trans> { + %newobject __iter__(PyObject **PYTHON_SELF); swig::SwigPyIterator* __iter__(PyObject **PYTHON_SELF) { return swig::make_forward_iterator(self->begin(), self->begin(), @@ -1061,6 +1065,7 @@ static void* ptr_for_bdddict(PyObject* obj) } %extend spot::internal::const_universal_dests { + %newobject __iter__(PyObject **PYTHON_SELF); swig::SwigPyIterator* __iter__(PyObject **PYTHON_SELF) { return swig::make_forward_iterator_np(self->begin(), self->begin(), @@ -1069,6 +1074,7 @@ static void* ptr_for_bdddict(PyObject* obj) } %extend spot::internal::mark_container { + %newobject __iter__(PyObject **PYTHON_SELF); swig::SwigPyIterator* __iter__(PyObject **PYTHON_SELF) { return swig::make_forward_iterator_np(self->begin(), self->begin(), @@ -1077,6 +1083,7 @@ static void* ptr_for_bdddict(PyObject* obj) } %extend spot::internal::scc_edges const, spot::internal::keep_all> { + %newobject __iter__(PyObject **PYTHON_SELF); swig::SwigPyIterator* __iter__(PyObject **PYTHON_SELF) { return swig::make_forward_iterator(self->begin(), self->begin(), @@ -1085,6 +1092,7 @@ static void* ptr_for_bdddict(PyObject* obj) } %extend spot::internal::scc_edges const, spot::internal::keep_inner_scc> { + %newobject __iter__(PyObject **PYTHON_SELF); swig::SwigPyIterator* __iter__(PyObject **PYTHON_SELF) { return swig::make_forward_iterator(self->begin(), self->begin(), @@ -1113,6 +1121,7 @@ static void* ptr_for_bdddict(PyObject* obj) } %extend spot::scc_info { + %newobject __iter__(PyObject **PYTHON_SELF); swig::SwigPyIterator* __iter__(PyObject **PYTHON_SELF) { return swig::make_forward_iterator(self->begin(), self->begin(),