From 1bb0b8e16d114f943e02101230bf8b6517b9c1f4 Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Tue, 23 Sep 2014 03:56:59 +0500 Subject: [PATCH] fix leak in lua when script does not execute properly in xml_binding handler --- src/mod/languages/mod_lua/mod_lua.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/mod/languages/mod_lua/mod_lua.cpp b/src/mod/languages/mod_lua/mod_lua.cpp index 95e6adbc9f..be68a43eb4 100644 --- a/src/mod/languages/mod_lua/mod_lua.cpp +++ b/src/mod/languages/mod_lua/mod_lua.cpp @@ -236,13 +236,14 @@ static switch_xml_t lua_fetch(const char *section, { switch_xml_t xml = NULL; + char *mycmd = NULL; if (!zstr(globals.xml_handler)) { lua_State *L = lua_init(); - char *mycmd = strdup(globals.xml_handler); const char *str; int error; + mycmd = strdup(globals.xml_handler); switch_assert(mycmd); lua_newtable(L); @@ -267,7 +268,7 @@ static switch_xml_t lua_fetch(const char *section, if((error = lua_parse_and_execute(L, mycmd))){ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "LUA script parse/execute error!\n"); - return NULL; + goto end; } lua_getglobal(L, "XML_STRING"); @@ -285,9 +286,13 @@ static switch_xml_t lua_fetch(const char *section, } lua_uninit(L); - free(mycmd); + } + end: + + switch_safe_free(mycmd); + return xml; }