I'm not really sure if the last patch is the right way to fix the issue since I couldn't find where tls_w.c originates from.
-- v2: ldap: Free the output buffer after every InitializeSecurityContextA() call (Valgrind). wldap32: Fix a message leak in ldap_parse_resultW() (Valgrind).
From: Sven Baars sbaars@codeweavers.com
--- dlls/wldap32/winldap_private.h | 2 ++ 1 file changed, 2 insertions(+)
diff --git a/dlls/wldap32/winldap_private.h b/dlls/wldap32/winldap_private.h index e834f9d4e6f..ce9a7cc3fa8 100644 --- a/dlls/wldap32/winldap_private.h +++ b/dlls/wldap32/winldap_private.h @@ -868,6 +868,7 @@ static inline void modfreeU( LDAPMod *mod ) bvarrayfreeU( mod->mod_vals.modv_bvals ); else strarrayfreeU( mod->mod_vals.modv_strvals ); + free( mod->mod_type ); free( mod ); }
@@ -1010,6 +1011,7 @@ static inline void modfreeW( LDAPModW *mod ) bvarrayfreeW( mod->mod_vals.modv_bvals ); else strarrayfreeW( mod->mod_vals.modv_strvals ); + free( mod->mod_type ); free( mod ); }
From: Sven Baars sbaars@codeweavers.com
--- dlls/wldap32/parse.c | 1 + 1 file changed, 1 insertion(+)
diff --git a/dlls/wldap32/parse.c b/dlls/wldap32/parse.c index 26e8de14c85..9eff55e4f0e 100644 --- a/dlls/wldap32/parse.c +++ b/dlls/wldap32/parse.c @@ -188,6 +188,7 @@ ULONG CDECL ldap_parse_resultW( LDAP *ld, WLDAP32_LDAPMessage *result, ULONG *re if (referrals) *referrals = strarrayUtoW( referralsU ); if (serverctrls) *serverctrls = controlarrayUtoW( serverctrlsU );
+ if (free) ldap_msgfree( result ); ldap_memfree( matchedU ); ldap_memfree( errorU ); ldap_memfree( referralsU );
From: Sven Baars sbaars@codeweavers.com
--- libs/ldap/libldap/tls_w.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/libs/ldap/libldap/tls_w.c b/libs/ldap/libldap/tls_w.c index c798d4249c0..e9101f87b97 100644 --- a/libs/ldap/libldap/tls_w.c +++ b/libs/ldap/libldap/tls_w.c @@ -228,7 +228,9 @@ tlsw_session_connect( LDAP *ld, tls_session *session, const char *name_in ) expected -= size; }
- out_bufs[0].cbBuffer = max_token; + FreeContextBuffer( out_bufs[0].pvBuffer); + out_bufs[0].pvBuffer = NULL; + status = InitializeSecurityContextA( &s->cred_handle, &s->ctxt_handle, (SEC_CHAR *)name_in, flags, 0, 0, &in_buf_desc, 0, NULL, &out_buf_desc, &attrs, NULL ); if ( status == SEC_E_INCOMPLETE_MESSAGE ) {