فهرست منبع

Ticket 47519 - memory leaks in access control

The leaks originally reported in the ticket could not be reproduced by
myself or the reporter.  This fix is completely theoretical, and solely
based on the valgrind report.

https://fedorahosted.org/389/ticket/47519

Reviewed by: richm(Thanks!)
Mark Reynolds 12 سال پیش
والد
کامیت
85bc265fd8
3فایلهای تغییر یافته به همراه7 افزوده شده و 7 حذف شده
  1. 3 3
      ldap/servers/plugins/acl/acl.c
  2. 1 2
      ldap/servers/plugins/acl/acl_ext.c
  3. 3 2
      ldap/servers/plugins/acl/acllist.c

+ 3 - 3
ldap/servers/plugins/acl/acl.c

@@ -3710,8 +3710,7 @@ acl_copyEval_context ( struct acl_pblock *aclpb, aclEvalContext *src,
 
 			if ( aclpb) aclpb->aclpb_stat_num_copy_attrs++;
 
-			if ( dest->acle_attrEval[dd_slot].attrEval_name )
-				slapi_ch_free ( (void **) &dest->acle_attrEval[dd_slot].attrEval_name );
+			slapi_ch_free_string( &dest->acle_attrEval[dd_slot].attrEval_name);
 
 			dest->acle_attrEval[dd_slot].attrEval_name  = 
 				slapi_ch_strdup ( src->acle_attrEval[i].attrEval_name );
@@ -3730,7 +3729,7 @@ acl_copyEval_context ( struct acl_pblock *aclpb, aclEvalContext *src,
 	}
 
 	dest->acle_numof_attrs = d_slot;
-	dest->acle_attrEval[d_slot].attrEval_name  =  NULL;
+	slapi_ch_free_string( &dest->acle_attrEval[d_slot].attrEval_name);
 
 	if ( copy_attr_only )
 		return;
@@ -3927,6 +3926,7 @@ acl__get_attrEval ( struct acl_pblock *aclpb, char *attr )
 			c_attrEval->attrEval_s_aciIndex = 0;
 		}
 		/* clean it before use */
+		slapi_ch_free_string(&c_attrEval->attrEval_name);
 		c_attrEval->attrEval_name = slapi_ch_strdup ( attr );
 		aclpb->aclpb_curr_attrEval = c_attrEval;
 	}

+ 1 - 2
ldap/servers/plugins/acl/acl_ext.c

@@ -991,8 +991,7 @@ acl__done_aclpb ( struct acl_pblock *aclpb )
 	slapi_sdn_done ( aclpb->aclpb_authorization_sdn );
 	aclpb->aclpb_pblock = NULL;
 
-	if ( aclpb->aclpb_search_base )
-		slapi_ch_free ( (void **) &aclpb->aclpb_search_base );
+	slapi_ch_free_string(&aclpb->aclpb_search_base );
 	for ( i=0; i < aclpb->aclpb_num_deny_handles; i++ )
 		aclpb->aclpb_deny_handles[i] = NULL;
 	aclpb->aclpb_num_deny_handles = 0;

+ 3 - 2
ldap/servers/plugins/acl/acllist.c

@@ -639,6 +639,7 @@ acllist_init_scan (Slapi_PBlock *pb, int scope, const char *base)
 	
 	basedn = slapi_ch_strdup (base);
 	index = 0;
+	slapi_ch_free_string(&aclpb->aclpb_search_base);
 	aclpb->aclpb_search_base = slapi_ch_strdup ( base );
 
 	while (basedn) {
@@ -651,7 +652,7 @@ acllist_init_scan (Slapi_PBlock *pb, int scope, const char *base)
 		                                 (IFP) __acllist_aciContainer_node_cmp);
 		if ( index >= aclpb_max_selected_acls -2 ) {
 			aclpb->aclpb_handles_index[0] = -1;
-			slapi_ch_free ( (void **) &basedn);
+			slapi_ch_free_string(&basedn);
 			break;
 		} else if ( NULL != root ) {
 			aclpb->aclpb_base_handles_index[index++] = root->acic_index;
@@ -664,7 +665,7 @@ acllist_init_scan (Slapi_PBlock *pb, int scope, const char *base)
 			                  "Failed to find root for base: %s \n", basedn );
 		}
 		tmp = slapi_dn_parent ( basedn );
-		slapi_ch_free ( (void **) &basedn);
+		slapi_ch_free_string(&basedn);
 		basedn = tmp;
 	}