Blame SOURCES/cyrus-imapd-memory_leak_on_cleanup.patch

388f6b
From acfc393638ad1b81a4234173b060bb63907ee52c Mon Sep 17 00:00:00 2001
388f6b
From: Pavel Zhukov <pzhukov@redhat.com>
388f6b
Date: Mon, 1 Oct 2018 15:51:01 +0200
388f6b
Subject: [PATCH] Replace simple return with cleanup flow
388f6b
388f6b
Make cleanup more consistence to prevent leaks of memory pointed by
388f6b
filter/base/res
388f6b
---
388f6b
 ptclient/ldap.c | 17 ++++++++++-------
388f6b
 1 file changed, 10 insertions(+), 7 deletions(-)
388f6b
388f6b
diff --git a/ptclient/ldap.c b/ptclient/ldap.c
388f6b
index 0b82d2c6b..65bae7bd6 100644
388f6b
--- a/ptclient/ldap.c
388f6b
+++ b/ptclient/ldap.c
388f6b
@@ -1388,13 +1388,14 @@ static int ptsmodule_make_authstate_group(
388f6b
 
388f6b
     if (strncmp(canon_id, "group:", 6))  { // Sanity check
388f6b
         *reply = "not a group identifier";
388f6b
-        return PTSM_FAIL;
388f6b
+        rc = PTSM_FAIL;
388f6b
+        goto done;
388f6b
     }
388f6b
 
388f6b
     rc = ptsmodule_connect();
388f6b
     if (rc != PTSM_OK) {
388f6b
         *reply = "ptsmodule_connect() failed";
388f6b
-        return rc;
388f6b
+        goto done;;
388f6b
     }
388f6b
 
388f6b
     rc = ptsmodule_expand_tokens(ptsm->group_filter, canon_id+6, NULL, &filter);
388f6b
@@ -1425,17 +1426,19 @@ static int ptsmodule_make_authstate_group(
388f6b
 
388f6b
         if (rc != LDAP_SUCCESS) {
388f6b
             syslog(LOG_DEBUG, "(groups) Result from domain query not OK");
388f6b
-            return rc;
388f6b
+            goto done;
388f6b
         } else {
388f6b
             syslog(LOG_DEBUG, "(groups) Result from domain query OK");
388f6b
         }
388f6b
 
388f6b
         if (ldap_count_entries(ptsm->ld, res) < 1) {
388f6b
             syslog(LOG_ERR, "(groups) No domain %s found", domain);
388f6b
-            return PTSM_FAIL;
388f6b
+            rc = PTSM_FAIL;
388f6b
+            goto done;
388f6b
         } else if (ldap_count_entries(ptsm->ld, res) > 1) {
388f6b
             syslog(LOG_ERR, "(groups) Multiple domains %s found", domain);
388f6b
-            return PTSM_FAIL;
388f6b
+            rc = PTSM_FAIL;
388f6b
+            goto done;
388f6b
         } else {
388f6b
             syslog(LOG_DEBUG, "(groups) Domain %s found", domain);
388f6b
             if ((entry = ldap_first_entry(ptsm->ld, res)) != NULL) {
388f6b
@@ -1452,7 +1455,7 @@ static int ptsmodule_make_authstate_group(
388f6b
                 }
388f6b
 
388f6b
                 if (rc != PTSM_OK) {
388f6b
-                    return rc;
388f6b
+                    goto done;
388f6b
                 } else {
388f6b
                     base = xstrdup(ptsm->group_base);
388f6b
                     syslog(LOG_DEBUG, "Continuing with ptsm->group_base: %s", ptsm->group_base);
388f6b
@@ -1462,7 +1465,7 @@ static int ptsmodule_make_authstate_group(
388f6b
     } else {
388f6b
         rc = ptsmodule_expand_tokens(ptsm->group_base, canon_id, NULL, &base);
388f6b
         if (rc != PTSM_OK)
388f6b
-            return rc;
388f6b
+            goto done;
388f6b
     }
388f6b
 
388f6b
     syslog(LOG_DEBUG, "(groups) about to search %s for %s", base, filter);