Procházet zdrojové kódy

Resolves: #428764
Summary: memory leaks in extensible filter code
Description: applying the patch provided by Ulf Weltman
1) type is not consumed in attrlist_merge
2) although dnattrs is a linked list, only the first item was released.
Test case filter: "(ou:dn:=groups)"

Noriko Hosoi před 17 roky
rodič
revize
de38261387
1 změnil soubory, kde provedl 5 přidání a 4 odebrání
  1. 5 4
      ldap/servers/slapd/filterentry.c

+ 5 - 4
ldap/servers/slapd/filterentry.c

@@ -441,6 +441,7 @@ dn2attrs(const char *dn)
                         bv.bv_len = strlen(val);
                         bvec[0] = &bv;
                         attrlist_merge (&dnAttrs, type, bvec);
+                        slapi_ch_free_string( &type );
                     }
                 }
                 ldap_value_free (avas);
@@ -505,7 +506,7 @@ test_extensible_filter(
 					/* B) Also check the DN attributes for the attribute value */
 					Slapi_Attr* dnattrs= dn2attrs(slapi_entry_get_dn_const(e));
 					rc= test_ava_filter( callers_pb, e, dnattrs, &a, LDAP_FILTER_EQUALITY, 0 /* Don't Verify Access */ , 0 /* don't just verify access */, access_check_done );
-        			slapi_attr_free( &dnattrs );
+        			attrlist_free( dnattrs );
 				}
 			}
 			else
@@ -520,7 +521,7 @@ test_extensible_filter(
 					/* D & F) Also check the DN attributes for the attribute value */
 					Slapi_Attr* dnattrs= dn2attrs(slapi_entry_get_dn_const(e));
 					mrf->mrf_match (mrf->mrf_object, e, dnattrs);
-        			slapi_attr_free( &dnattrs );
+        			attrlist_free( dnattrs );
 				}
 			}
 		}
@@ -573,7 +574,7 @@ test_extensible_filter(
 					/* B) Also check the DN attributes for the attribute value */
 					Slapi_Attr* dnattrs= dn2attrs(slapi_entry_get_dn_const(e));
 					rc= test_ava_filter( callers_pb, e, dnattrs, &a, LDAP_FILTER_EQUALITY, 0 /* Don't Verify Access */ , 0 /* don't just verify access */, access_check_done );
-        			slapi_attr_free( &dnattrs );
+        			attrlist_free( dnattrs );
 				}
 			}
 			else
@@ -588,7 +589,7 @@ test_extensible_filter(
 					/* D & F) Also check the DN attributes for the attribute value */
 					Slapi_Attr* dnattrs= dn2attrs(slapi_entry_get_dn_const(e));
 					mrf->mrf_match (mrf->mrf_object, e, dnattrs);
-        			slapi_attr_free( &dnattrs );
+        			attrlist_free( dnattrs );
 				}
 			}
 		}