Hans Leidekker : wldap32: Fix broken parameter handling.

Alexandre Julliard julliard at wine.codeweavers.com
Mon Apr 10 09:32:50 CDT 2006


Module: wine
Branch: refs/heads/master
Commit: 1bf5e2da0ac53d85bae49cc43dfbcf981e229433
URL:    http://source.winehq.org/git/?p=wine.git;a=commit;h=1bf5e2da0ac53d85bae49cc43dfbcf981e229433

Author: Hans Leidekker <hans at it.vu.nl>
Date:   Sat Apr  8 16:11:42 2006 +0200

wldap32: Fix broken parameter handling.

---

 dlls/wldap32/control.c |   28 ++++++++++++++++++----------
 1 files changed, 18 insertions(+), 10 deletions(-)

diff --git a/dlls/wldap32/control.c b/dlls/wldap32/control.c
index 5c4b413..b8b5963 100644
--- a/dlls/wldap32/control.c
+++ b/dlls/wldap32/control.c
@@ -214,16 +214,20 @@ INT ldap_create_vlv_controlA( WLDAP32_LD
 {
     INT ret = LDAP_NOT_SUPPORTED;
 #ifdef HAVE_LDAP
-    LDAPControlW **controlW = NULL;
+    LDAPControlW *controlW = NULL;
 
     TRACE( "(%p, %p, 0x%02x, %p)\n", ld, info, critical, control );
 
-    if (!ld) return ~0UL;
+    if (!ld || !control) return ~0UL;
 
-    ret = ldap_create_vlv_controlW( ld, info, critical, controlW );
+    ret = ldap_create_vlv_controlW( ld, info, critical, &controlW );
 
-    *control = controlWtoA( *controlW );
-    ldap_control_freeW( *controlW );
+    if (ret == LDAP_SUCCESS)
+    {
+        *control = controlWtoA( controlW );
+        if (!*control) ret = WLDAP32_LDAP_NO_MEMORY;
+        ldap_control_freeW( controlW );
+    }
 
 #endif
     return ret;
@@ -256,16 +260,20 @@ INT ldap_create_vlv_controlW( WLDAP32_LD
 {
     INT ret = LDAP_NOT_SUPPORTED;
 #ifdef HAVE_LDAP
-    LDAPControl **controlU = NULL;
+    LDAPControl *controlU = NULL;
 
     TRACE( "(%p, %p, 0x%02x, %p)\n", ld, info, critical, control );
 
-    if (!ld) return ~0UL;
+    if (!ld || !control) return ~0UL;
 
-    ret = ldap_create_vlv_control( ld, (LDAPVLVInfo *)info, controlU );
+    ret = ldap_create_vlv_control( ld, (LDAPVLVInfo *)info, &controlU );
 
-    *control = controlUtoW( *controlU );
-    ldap_control_free( *controlU );
+    if (ret == LDAP_SUCCESS)
+    {
+        *control = controlUtoW( controlU );
+        if (!*control) ret = WLDAP32_LDAP_NO_MEMORY;
+        ldap_control_free( controlU );
+    }
 
 #endif
     return ret;




More information about the wine-cvs mailing list