https://bugs.openldap.org/show_bug.cgi?id=9530
--- Comment #1 from Howard Chu <[email protected]> --- (In reply to [email protected] from comment #0) > I've been seeing double-free errors in valgrind when calling > > ldap_set_option(lc, LDAP_OPT_DEFBASE) > > I tracked it down to code in ldap_create() in open.c. > When we copy the global options to the new LDAP *, we create new versions of > some but not all malloced options. The ldo_defbase and ldo_defbinddn option > members are strings that are *not* reallocated (ldo_defbase may not be > important). > > This diff appears to fix the problem: > > diff --git a/libraries/libldap/open.c b/libraries/libldap/open.c > index 5882b6336..0828d334e 100644 > --- a/libraries/libldap/open.c > +++ b/libraries/libldap/open.c > @@ -139,6 +139,14 @@ ldap_create( LDAP **ldp ) > ld->ld_options.ldo_defludp = NULL; > ld->ld_options.ldo_conn_cbs = NULL; > > + /* Norm Green, April 20, 2021 - fix pointers that get copied. > + * must realloc these to prevent double-free errors */ > + > + ld->ld_options.ldo_defbase = gopts->ldo_defbase ? > + LDAP_STRDUP(gopts->ldo_defbase) : NULL; That appears to be correct. > + ld->ld_options.ldo_defbinddn = gopts->ldo_defbinddn ? > + LDAP_STRDUP(gopts->ldo_defbinddn) : NULL; This appears to be unnecessary, since there are no functions to modify ldo_defbinddn after initialization. -- You are receiving this mail because: You are on the CC list for the issue.
