summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPeng Wu <alexepico@gmail.com>2018-06-15 11:36:12 +0800
committerPeng Wu <alexepico@gmail.com>2018-06-15 11:36:12 +0800
commit766a1322395e32286930a62b9f66033a0d8d637c (patch)
tree7de09b05eba63d1c700339df8c5262a243c98dff
parent89e6d4c522217278ac24d5f4cfc38162a267c9a3 (diff)
downloadibus-libpinyin-766a1322395e32286930a62b9f66033a0d8d637c.tar.gz
ibus-libpinyin-766a1322395e32286930a62b9f66033a0d8d637c.tar.xz
ibus-libpinyin-766a1322395e32286930a62b9f66033a0d8d637c.zip
fixes lua memory leak
-rw-r--r--lua/lua-plugin.c2
-rw-r--r--lua/lua-plugin.h2
-rw-r--r--src/PYPLuaConverterCandidates.cc10
-rw-r--r--src/PYPLuaTriggerCandidates.cc13
4 files changed, 17 insertions, 10 deletions
diff --git a/lua/lua-plugin.c b/lua/lua-plugin.c
index 2a193f3..167404c 100644
--- a/lua/lua-plugin.c
+++ b/lua/lua-plugin.c
@@ -416,7 +416,7 @@ static const lua_command_candidate_t * ibus_engine_plugin_get_candidate(lua_Stat
/**
* retrieve the first string value. (value has been copied.)
*/
-const char * ibus_engine_plugin_get_first_result(IBusEnginePlugin * plugin){
+gchar * ibus_engine_plugin_get_first_result(IBusEnginePlugin * plugin){
IBusEnginePluginPrivate * priv = IBUS_ENGINE_PLUGIN_GET_PRIVATE(plugin);
const char * result = NULL; int type;
lua_State * L = priv->L;
diff --git a/lua/lua-plugin.h b/lua/lua-plugin.h
index fb5f5b9..ebb2b2a 100644
--- a/lua/lua-plugin.h
+++ b/lua/lua-plugin.h
@@ -174,7 +174,7 @@ int ibus_engine_plugin_call(IBusEnginePlugin * plugin, const char * lua_function
/**
* retrieve the first string value. (value has been copied.)
*/
-const char * ibus_engine_plugin_get_first_result(IBusEnginePlugin * plugin);
+gchar * ibus_engine_plugin_get_first_result(IBusEnginePlugin * plugin);
/**
* retrieve the retval string value. (value has been copied.)
diff --git a/src/PYPLuaConverterCandidates.cc b/src/PYPLuaConverterCandidates.cc
index e4608f4..a581c13 100644
--- a/src/PYPLuaConverterCandidates.cc
+++ b/src/PYPLuaConverterCandidates.cc
@@ -75,8 +75,9 @@ LuaConverterCandidates::processCandidates (std::vector<EnhancedCandidate> & cand
ibus_engine_plugin_call (m_lua_plugin, converter,
enhanced.m_display_string.c_str ());
- enhanced.m_display_string =
- ibus_engine_plugin_get_first_result (m_lua_plugin);
+ gchar * string = ibus_engine_plugin_get_first_result (m_lua_plugin);
+ enhanced.m_display_string = string;
+ g_free (string);
}
return TRUE;
@@ -100,8 +101,9 @@ LuaConverterCandidates::selectCandidate (EnhancedCandidate & enhanced)
if (SELECT_CANDIDATE_MODIFY_IN_PLACE_AND_COMMIT == action) {
ibus_engine_plugin_call (m_lua_plugin, converter,
enhanced.m_display_string.c_str ());
- enhanced.m_display_string =
- ibus_engine_plugin_get_first_result (m_lua_plugin);
+ gchar * string = ibus_engine_plugin_get_first_result (m_lua_plugin);
+ enhanced.m_display_string = string;
+ g_free (string);
}
return action;
diff --git a/src/PYPLuaTriggerCandidates.cc b/src/PYPLuaTriggerCandidates.cc
index 41534b4..808e97a 100644
--- a/src/PYPLuaTriggerCandidates.cc
+++ b/src/PYPLuaTriggerCandidates.cc
@@ -64,12 +64,15 @@ LuaTriggerCandidates::processCandidates (std::vector<EnhancedCandidate> & candid
const char * lua_function_name = NULL;
const char * text = m_editor->m_text;
+ gchar * string = NULL;
if (ibus_engine_plugin_match_input
(m_lua_plugin, text, &lua_function_name)) {
ibus_engine_plugin_call (m_lua_plugin, lua_function_name, text);
- enhanced.m_display_string =
- ibus_engine_plugin_get_first_result (m_lua_plugin);
+
+ string = ibus_engine_plugin_get_first_result (m_lua_plugin);
+ enhanced.m_display_string = string;
+ g_free (string);
candidates.insert (pos, enhanced);
return TRUE;
@@ -81,8 +84,10 @@ LuaTriggerCandidates::processCandidates (std::vector<EnhancedCandidate> & candid
if (ibus_engine_plugin_match_candidate
(m_lua_plugin, text, &lua_function_name)) {
ibus_engine_plugin_call (m_lua_plugin, lua_function_name, text);
- enhanced.m_display_string =
- ibus_engine_plugin_get_first_result (m_lua_plugin);
+
+ string = ibus_engine_plugin_get_first_result (m_lua_plugin);
+ enhanced.m_display_string = string;
+ g_free (string);
candidates.insert (pos, enhanced);
return TRUE;