From f7d502d1e13104baae916d21869a0335512c882c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Markus=20M=C3=A4kel=C3=A4?= Date: Mon, 9 Mar 2020 07:51:08 +0200 Subject: [PATCH] Use json_object_set_new The non-set case should only be used when a copy of an existing object is needed. This fixes a memory leak in Cache::do_get_info. --- 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 +-- 5 files changed, 7 insertions(+), 13 deletions(-) diff --git a/server/modules/filter/cache/cache.cc b/server/modules/filter/cache/cache.cc index d519620b6..9544791ed 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 a9c6e114d..50e4c03f2 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 69da10c32..ff8cebf4c 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 6cc16eaa8..03ff9cd42 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); } } @@ -596,8 +594,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 8873aec62..582e8e14e 100644 --- a/server/modules/filter/cache/storage/storage_inmemory/inmemorystorage.cc +++ b/server/modules/filter/cache/storage/storage_inmemory/inmemorystorage.cc @@ -282,8 +282,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); } }