summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorEndi S. Dewata <edewata@redhat.com>2010-07-24 01:28:18 -0500
committerNoriko Hosoi <nhosoi@redhat.com>2010-08-19 16:59:45 -0700
commitc4962651906ef23ad353ad00eddadd44d002158d (patch)
tree94ff609145537ce36615f57e37baa33361fdd5ba /lib
parentad7e364914c65490b3ab0f1b4dea8be307f7450c (diff)
downloadds-c4962651906ef23ad353ad00eddadd44d002158d.tar.gz
ds-c4962651906ef23ad353ad00eddadd44d002158d.tar.xz
ds-c4962651906ef23ad353ad00eddadd44d002158d.zip
Bug 617630 - fix coverify Defect Type: Resource leaks issues CID 12052 - 12093
https://bugzilla.redhat.com/show_bug.cgi?id=617630 Resolves: bug 617630 Bug description: fix coverify Defect Type: Resource leaks issues CID 12068, 12069. description: dbinfo_to_certinfo() has been modified to release unused resources when error occurs.
Diffstat (limited to 'lib')
-rw-r--r--lib/ldaputil/certmap.c30
1 files changed, 20 insertions, 10 deletions
diff --git a/lib/ldaputil/certmap.c b/lib/ldaputil/certmap.c
index cea403b6..83de904e 100644
--- a/lib/ldaputil/certmap.c
+++ b/lib/ldaputil/certmap.c
@@ -487,14 +487,18 @@ static int dbconf_to_certmap_err (int err)
static int dbinfo_to_certinfo (DBConfDBInfo_t *db_info,
LDAPUCertMapInfo_t **certinfo_out)
{
- LDAPUCertMapInfo_t *certinfo;
- int rv;
+ LDAPUCertMapInfo_t *certinfo = NULL;
+ LDAPUPropValList_t *propval_list = NULL;
+ int rv = LDAPU_SUCCESS;
*certinfo_out = 0;
certinfo = (LDAPUCertMapInfo_t *)malloc(sizeof(LDAPUCertMapInfo_t));
- if (!certinfo) return LDAPU_ERR_OUT_OF_MEMORY;
+ if (!certinfo) {
+ rv = LDAPU_ERR_OUT_OF_MEMORY;
+ goto error;
+ }
memset((void *)certinfo, 0, sizeof(LDAPUCertMapInfo_t));
@@ -509,7 +513,6 @@ static int dbinfo_to_certinfo (DBConfDBInfo_t *db_info,
/* hijack actual prop-vals from dbinfo -- to avoid strdup calls */
if (db_info->firstprop) {
- LDAPUPropValList_t *propval_list;
LDAPUPropVal_t *propval;
DBPropVal_t *dbpropval;
@@ -517,14 +520,16 @@ static int dbinfo_to_certinfo (DBConfDBInfo_t *db_info,
rv = ldapu_list_alloc(&propval_list);
- if (rv != LDAPU_SUCCESS) return rv;
+ if (rv != LDAPU_SUCCESS) {
+ goto error;
+ }
while(dbpropval) {
propval = (LDAPUPropVal_t *)malloc(sizeof(LDAPUPropVal_t));
if (!propval) {
- free(certinfo);
- return LDAPU_ERR_OUT_OF_MEMORY;
+ rv = LDAPU_ERR_OUT_OF_MEMORY;
+ goto error;
}
propval->prop = dbpropval->prop;
@@ -536,8 +541,7 @@ static int dbinfo_to_certinfo (DBConfDBInfo_t *db_info,
rv = ldapu_list_add_info(propval_list, propval);
if (rv != LDAPU_SUCCESS) {
- free(certinfo);
- return rv;
+ goto error;
}
dbpropval = dbpropval->next;
@@ -547,8 +551,14 @@ static int dbinfo_to_certinfo (DBConfDBInfo_t *db_info,
}
*certinfo_out = certinfo;
+ goto done;
- return LDAPU_SUCCESS;
+error:
+ if (propval_list) ldapu_propval_list_free(propval_list);
+ if (certinfo) free(certinfo);
+
+done:
+ return rv;
}
static int ldapu_binary_cmp_certs (void *subject_cert,