From cf1d1178d7d83009e921e0b2160b9d04d6959715 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Markus=20M=C3=A4kel=C3=A4?= Date: Wed, 22 Jul 2020 13:27:36 +0300 Subject: [PATCH] MXS-3087: Fix diagnostic memory leaks Fixed leak in load_utils.cc and the cache filter. Also changed all instances of json_object_set with json_object_set_new to make sure it's only used when the references are to be stolen. --- server/core/load_utils.cc | 2 +- server/modules/filter/cache/cache.cc | 2 +- server/modules/filter/cache/cachept.cc | 3 +-- server/modules/filter/cache/cachesimple.cc | 3 +-- server/modules/filter/cache/lrustorage.cc | 9 +++------ .../cache/storage/storage_inmemory/inmemorystorage.cc | 3 +-- 6 files changed, 8 insertions(+), 14 deletions(-) diff --git a/server/core/load_utils.cc b/server/core/load_utils.cc index a15bef1cc..34f060063 100644 --- a/server/core/load_utils.cc +++ b/server/core/load_utils.cc @@ -530,7 +530,7 @@ static json_t* module_json_data(const LOADED_MODULE* mod, const char* host) if (mod->info->parameters[i].default_value) { - json_object_set(p, "default_value", json_string(mod->info->parameters[i].default_value)); + json_object_set_new(p, "default_value", json_string(mod->info->parameters[i].default_value)); } if (mod->info->parameters[i].type == MXS_MODULE_PARAM_ENUM diff --git a/server/modules/filter/cache/cache.cc b/server/modules/filter/cache/cache.cc index de0e49f4c..5120883c0 100644 --- a/server/modules/filter/cache/cache.cc +++ b/server/modules/filter/cache/cache.cc @@ -202,7 +202,7 @@ json_t* Cache::do_get_info(uint32_t what) const // failure. } - json_object_set(pInfo, "rules", pArray); + json_object_set_new(pInfo, "rules", pArray); } } } diff --git a/server/modules/filter/cache/cachept.cc b/server/modules/filter/cache/cachept.cc index f689a0fec..630400ea3 100644 --- a/server/modules/filter/cache/cachept.cc +++ b/server/modules/filter/cache/cachept.cc @@ -112,8 +112,7 @@ json_t* CachePT::get_info(uint32_t what) const if (pThreadInfo) { - json_object_set(pInfo, key, pThreadInfo); - json_decref(pThreadInfo); + json_object_set_new(pInfo, key, pThreadInfo); } } } diff --git a/server/modules/filter/cache/cachesimple.cc b/server/modules/filter/cache/cachesimple.cc index 498440bbf..0b483861e 100644 --- a/server/modules/filter/cache/cachesimple.cc +++ b/server/modules/filter/cache/cachesimple.cc @@ -90,8 +90,7 @@ json_t* CacheSimple::do_get_info(uint32_t what) const if (CACHE_RESULT_IS_OK(result)) { - json_object_set(pInfo, "storage", pStorageInfo); - json_decref(pStorageInfo); + json_object_set_new(pInfo, "storage", pStorageInfo); } } diff --git a/server/modules/filter/cache/lrustorage.cc b/server/modules/filter/cache/lrustorage.cc index 7e833f954..91c65fca5 100644 --- a/server/modules/filter/cache/lrustorage.cc +++ b/server/modules/filter/cache/lrustorage.cc @@ -54,8 +54,7 @@ cache_result_t LRUStorage::do_get_info(uint32_t what, { m_stats.fill(pLru); - json_object_set(*ppInfo, "lru", pLru); - json_decref(pLru); + json_object_set_new(*ppInfo, "lru", pLru); } json_t* pStorage_info; @@ -64,8 +63,7 @@ cache_result_t LRUStorage::do_get_info(uint32_t what, if (CACHE_RESULT_IS_OK(result)) { - json_object_set(*ppInfo, "real_storage", pStorage_info); - json_decref(pStorage_info); + json_object_set_new(*ppInfo, "real_storage", pStorage_info); } } @@ -593,8 +591,7 @@ static void set_integer(json_t* pObject, const char* zName, size_t value) if (pValue) { - json_object_set(pObject, zName, pValue); - json_decref(pValue); + json_object_set_new(pObject, zName, pValue); } } diff --git a/server/modules/filter/cache/storage/storage_inmemory/inmemorystorage.cc b/server/modules/filter/cache/storage/storage_inmemory/inmemorystorage.cc index 07794a780..545227957 100644 --- a/server/modules/filter/cache/storage/storage_inmemory/inmemorystorage.cc +++ b/server/modules/filter/cache/storage/storage_inmemory/inmemorystorage.cc @@ -281,8 +281,7 @@ static void set_integer(json_t* pObject, const char* zName, size_t value) if (pValue) { - json_object_set(pObject, zName, pValue); - json_decref(pValue); + json_object_set_new(pObject, zName, pValue); } }