From 47c1089c61db32f85777847c88f4aed6ef2fc050 Mon Sep 17 00:00:00 2001 From: John Wiegley Date: Sat, 7 Nov 2009 20:00:34 -0500 Subject: Make sure to clean up memory after a Python exception --- src/pyinterp.cc | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) (limited to 'src/pyinterp.cc') diff --git a/src/pyinterp.cc b/src/pyinterp.cc index b9e1a0e0..2df82563 100644 --- a/src/pyinterp.cc +++ b/src/pyinterp.cc @@ -255,12 +255,22 @@ value_t python_interpreter_t::python_command(call_scope_t& args) std::strcpy(argv[i + 1], arg.c_str()); } - int status = Py_Main(static_cast(args.size()) + 1, argv); + int status; + try { + status = Py_Main(static_cast(args.size()) + 1, argv); + } + catch (...) { + for (std::size_t i = 0; i < args.size() + 1; i++) + delete[] argv[i]; + delete[] argv; + throw; + } + for (std::size_t i = 0; i < args.size() + 1; i++) delete[] argv[i]; delete[] argv; - + if (status != 0) throw status; -- cgit v1.2.3