From a361686b2c872cad6493804eb71b8b8e7e151a4f Mon Sep 17 00:00:00 2001 From: Phil Lavin Date: Mon, 19 Sep 2016 21:25:22 +0100 Subject: [PATCH 1/2] purple: Fix multiple memory leaks in DB code --- modules/purple/mapping.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/modules/purple/mapping.c b/modules/purple/mapping.c index e1aa00e1772..bbdb69f1db9 100644 --- a/modules/purple/mapping.c +++ b/modules/purple/mapping.c @@ -133,8 +133,11 @@ char *find_sip_user(char *extern_user) { if (result == NULL) return NULL; - if (result->n <= 0) + + if (result->n <= 0) { + pa_dbf.free_result(pa_db, result); return NULL; + } row = &result->rows[0]; row_vals = ROW_VALUES(row); @@ -208,6 +211,7 @@ extern_account_t *find_accounts(char* sip_user, int* count) { return NULL; } if (result->n <= 0) { + pa_dbf.free_result(pa_db, result); LM_ERR("result count = %d\n", result->n); return NULL; } @@ -290,8 +294,11 @@ extern_user_t *find_users(char *sip_user, int* count) { if (result == NULL) return NULL; - if (result->n <= 0) + + if (result->n <= 0) { + pa_dbf.free_result(pa_db, result); return NULL; + } users = (extern_user_t*) pkg_malloc(sizeof(extern_user_t)*result->n); From 0c36c1b62efef176ae6e9322f14096e3a63ed348 Mon Sep 17 00:00:00 2001 From: Phil Lavin Date: Mon, 19 Sep 2016 21:27:54 +0100 Subject: [PATCH 2/2] presence: Fix memory leak in DB code --- modules/presence/presentity.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/modules/presence/presentity.c b/modules/presence/presentity.c index d81b90ef8bc..e601153dff5 100644 --- a/modules/presence/presentity.c +++ b/modules/presence/presentity.c @@ -396,9 +396,11 @@ int delete_presentity_if_dialog_id_exists(presentity_t* presentity, char* dialog if(result == NULL) return -3; - // No results from query definitely means no dialog exists - if (result->n <= 0) + /* no results from query definitely means no dialog exists */ + if (result->n <= 0) { + pa_dbf.free_result(pa_db, result); return 0; + } // Loop the rows returned from the DB for (i=0; i < result->n; i++)