Hans Leidekker : wldap32: Fix parsing page controls.

Alexandre Julliard julliard at winehq.org
Tue Apr 20 16:27:44 CDT 2021


Module: wine
Branch: master
Commit: fb4426780390d2a6bd1fced47f867ba46afa3ead
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=fb4426780390d2a6bd1fced47f867ba46afa3ead

Author: Hans Leidekker <hans at codeweavers.com>
Date:   Tue Apr 20 11:42:19 2021 +0200

wldap32: Fix parsing page controls.

Signed-off-by: Hans Leidekker <hans at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/wldap32/page.c | 28 ++++++++++++++--------------
 1 file changed, 14 insertions(+), 14 deletions(-)

diff --git a/dlls/wldap32/page.c b/dlls/wldap32/page.c
index 471108c636e..8b0ded40e35 100644
--- a/dlls/wldap32/page.c
+++ b/dlls/wldap32/page.c
@@ -20,6 +20,7 @@
 
 #include <stdarg.h>
 #include <stdlib.h>
+#include <limits.h>
 #include "windef.h"
 #include "winbase.h"
 #include "winnls.h"
@@ -31,8 +32,6 @@
 
 WINE_DEFAULT_DEBUG_CHANNEL(wldap32);
 
-#define LDAP_MAXINT (2^31)
-
 static struct berval null_cookieW = { 0, NULL };
 
 /***********************************************************************
@@ -48,7 +47,7 @@ ULONG CDECL ldap_create_page_controlA( LDAP *ld, ULONG pagesize, struct berval *
 
     TRACE( "(%p, 0x%08x, %p, 0x%02x, %p)\n", ld, pagesize, cookie, critical, control );
 
-    if (!ld || !control || pagesize > LDAP_MAXINT) return LDAP_PARAM_ERROR;
+    if (!ld || !control || pagesize > INT_MAX) return LDAP_PARAM_ERROR;
 
     ret = ldap_create_page_controlW( ld, pagesize, cookie, critical, &controlW );
     if (ret == LDAP_SUCCESS)
@@ -131,7 +130,7 @@ ULONG CDECL ldap_create_page_controlW( LDAP *ld, ULONG pagesize, struct berval *
 {
     TRACE( "(%p, 0x%08x, %p, 0x%02x, %p)\n", ld, pagesize, cookie, critical, control );
 
-    if (!ld || !control || pagesize > LDAP_MAXINT) return LDAP_PARAM_ERROR;
+    if (!ld || !control || pagesize > INT_MAX) return LDAP_PARAM_ERROR;
     return create_page_control( pagesize, cookie, critical, control );
 }
 
@@ -230,18 +229,18 @@ ULONG CDECL ldap_parse_page_controlA( LDAP *ld, LDAPControlA **ctrls, ULONG *cou
 /***********************************************************************
  *      ldap_parse_page_controlW      (WLDAP32.@)
  */
-ULONG CDECL ldap_parse_page_controlW( LDAP *ld, LDAPControlW **ctrls, ULONG *count, struct berval **cookie )
+ULONG CDECL ldap_parse_page_controlW( LDAP *ld, LDAPControlW **ctrls, ULONG *ret_count, struct berval **ret_cookie )
 {
-    ULONG ret;
+    ULONG ret, count;
     LDAPControlW *control = NULL;
     BerElement *ber;
-    struct berval *vec[2];
+    struct berval *cookie = NULL;
     int tag;
     ULONG i;
 
-    TRACE( "(%p, %p, %p, %p)\n", ld, ctrls, count, cookie );
+    TRACE( "(%p, %p, %p, %p)\n", ld, ctrls, ret_count, ret_cookie );
 
-    if (!ld || !ctrls || !count || !cookie) return LDAP_PARAM_ERROR;
+    if (!ld || !ctrls || !ret_count || !ret_cookie) return LDAP_PARAM_ERROR;
 
     for (i = 0; ctrls[i]; i++)
     {
@@ -252,13 +251,14 @@ ULONG CDECL ldap_parse_page_controlW( LDAP *ld, LDAPControlW **ctrls, ULONG *cou
 
     if (!(ber = ber_init( &control->ldctl_value ))) return LDAP_NO_MEMORY;
 
-    vec[0] = *cookie;
-    vec[1] = 0;
-    tag = ber_scanf( ber, (char *)"{iV}", count, vec );
-    if (tag == LBER_ERROR)
-        ret = LDAP_DECODING_ERROR;
+    tag = ber_scanf( ber, (char *)"{iO}", &count, &cookie );
+    if (tag == LBER_ERROR) ret = LDAP_DECODING_ERROR;
     else
+    {
+        *ret_count = count;
+        *ret_cookie = cookie;
         ret = LDAP_SUCCESS;
+    }
 
     ber_free( ber, 1 );
     return ret;




More information about the wine-cvs mailing list