compiling against OpenLDAP 2.0.11

Steffen Ries steffen.ries at sympatico.ca
Wed Jul 11 02:32:07 CEST 2001


Michael Ströder <michael at stroeder.com> writes:

> Anyone did notice the forwarded warning message by Stig about
> possible memory leaks with OpenLDAP 2.0.x API?
> Please glance over it:
> http://www.geocrawler.com/archives/3/1568/2001/6/0/6036658/

I looked through it.

The first issue (ldap_first_attribute) has changed from OpenLDAP 1.2
to 2.0.x so that the memory is *never* freed by the library. In 1.1 it
was freed, when the last attribute was read. However, the current
python-ldap code did never free the memory. IOW, there is a possible
memory leak in error cases.

The second issue (ldap_get_dn) has *not* changed between OpenLDAP 1.2
and 2.0.x, i.e. the same kind of memory leak exists for both API
versions.

The attached patch should fix both issues. The last "ber_free()"
should be surrounded by some #ifdef OPENLDAP_2_0_X conditional...

I scanned through the documentation and did not notice any further
changes in memory handling, but then again, I did not really look too
hard.

*** python-ldap-1.10alpha3/Modules/message.c	Mon Aug 14 18:37:37 2000
--- python-ldap-openldap-2/Modules/message.c	Mon Jul  2 10:55:30 2001
***************
*** 78,84 ****
--- 78,86 ----
  	     if (valuelist == NULL) {
  		Py_DECREF(attrdict);
  		Py_DECREF(result);
+                 ber_free(ber, 0);
  		ldap_msgfree( m );
+                 ldap_memfree(attr);
  		return NULL;
  	     }
  
***************
*** 95,101 ****
--- 97,105 ----
  			Py_DECREF(result);
  			Py_DECREF(valuestr);
  			Py_DECREF(valuelist);
+                         ber_free(ber, 0);
  			ldap_msgfree( m );
+                         ldap_memfree(attr);
  			return NULL;
  		    }
  		    Py_DECREF(valuestr);
***************
*** 103,114 ****
--- 107,121 ----
  		ldap_value_free_len(bvals);
  	     }
  	     Py_DECREF( valuelist );
+              ldap_memfree(attr);
  	 }
  
  	 entrytuple = Py_BuildValue("(sO)", dn, attrdict);
+          ldap_memfree(dn);
  	 Py_DECREF(attrdict);
  	 PyList_Append(result, entrytuple);
  	 Py_DECREF(entrytuple);
+          ber_free(ber, 0);
       }
       ldap_msgfree( m );
       return result;



/steffen
-- 
steffen.ries at sympatico.ca	<> Gravity is a myth -- the Earth sucks!





More information about the python-ldap mailing list