wldap32: Properly implement ldap_encode_sort_control[A, W] (Coverity).
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com> Signed-off-by: Hans Leidekker <hans@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
b1b05e62e9
commit
d4d3bacac4
|
@ -274,15 +274,37 @@ INT CDECL ldap_create_vlv_controlW( WLDAP32_LDAP *ld, WLDAP32_LDAPVLVInfo *info,
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline void bv_val_dup( const struct WLDAP32_berval *src, struct WLDAP32_berval *dst )
|
||||||
|
{
|
||||||
|
dst->bv_val = HeapAlloc( GetProcessHeap(), 0, src->bv_len );
|
||||||
|
if (dst->bv_val)
|
||||||
|
{
|
||||||
|
memcpy( dst->bv_val, src->bv_val, src->bv_len );
|
||||||
|
dst->bv_len = src->bv_len;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
dst->bv_len = 0;
|
||||||
|
}
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* ldap_encode_sort_controlA (WLDAP32.@)
|
* ldap_encode_sort_controlA (WLDAP32.@)
|
||||||
*
|
*
|
||||||
* See ldap_encode_sort_controlW.
|
* See ldap_encode_sort_controlW.
|
||||||
*/
|
*/
|
||||||
ULONG CDECL ldap_encode_sort_controlA( WLDAP32_LDAP *ld, PLDAPSortKeyA *sortkeys,
|
ULONG CDECL ldap_encode_sort_controlA( WLDAP32_LDAP *ld, PLDAPSortKeyA *sortkeys,
|
||||||
PLDAPControlA control, BOOLEAN critical )
|
PLDAPControlA ret, BOOLEAN critical )
|
||||||
{
|
{
|
||||||
return ldap_create_sort_controlA( ld, sortkeys, critical, &control );
|
LDAPControlA *control;
|
||||||
|
ULONG result;
|
||||||
|
|
||||||
|
if ((result = ldap_create_sort_controlA( ld, sortkeys, critical, &control )) == WLDAP32_LDAP_SUCCESS)
|
||||||
|
{
|
||||||
|
ret->ldctl_oid = strdupU(control->ldctl_oid);
|
||||||
|
bv_val_dup( &control->ldctl_value, &ret->ldctl_value );
|
||||||
|
ret->ldctl_iscritical = control->ldctl_iscritical;
|
||||||
|
ldap_control_freeA( control );
|
||||||
|
}
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
|
@ -308,9 +330,19 @@ ULONG CDECL ldap_encode_sort_controlA( WLDAP32_LDAP *ld, PLDAPSortKeyA *sortkeys
|
||||||
* ldap_create_sort_control instead.
|
* ldap_create_sort_control instead.
|
||||||
*/
|
*/
|
||||||
ULONG CDECL ldap_encode_sort_controlW( WLDAP32_LDAP *ld, PLDAPSortKeyW *sortkeys,
|
ULONG CDECL ldap_encode_sort_controlW( WLDAP32_LDAP *ld, PLDAPSortKeyW *sortkeys,
|
||||||
PLDAPControlW control, BOOLEAN critical )
|
PLDAPControlW ret, BOOLEAN critical )
|
||||||
{
|
{
|
||||||
return ldap_create_sort_controlW( ld, sortkeys, critical, &control );
|
LDAPControlW *control;
|
||||||
|
ULONG result;
|
||||||
|
|
||||||
|
if ((result = ldap_create_sort_controlW( ld, sortkeys, critical, &control )) == WLDAP32_LDAP_SUCCESS)
|
||||||
|
{
|
||||||
|
ret->ldctl_oid = strdupW(control->ldctl_oid);
|
||||||
|
bv_val_dup( &control->ldctl_value, &ret->ldctl_value );
|
||||||
|
ret->ldctl_iscritical = control->ldctl_iscritical;
|
||||||
|
ldap_control_freeW( control );
|
||||||
|
}
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
|
|
|
@ -18,6 +18,8 @@
|
||||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "wine/unicode.h"
|
||||||
|
|
||||||
extern HINSTANCE hwldap32 DECLSPEC_HIDDEN;
|
extern HINSTANCE hwldap32 DECLSPEC_HIDDEN;
|
||||||
|
|
||||||
ULONG map_error( int ) DECLSPEC_HIDDEN;
|
ULONG map_error( int ) DECLSPEC_HIDDEN;
|
||||||
|
@ -37,6 +39,17 @@ static inline char *strdupU( const char *src )
|
||||||
return dst;
|
return dst;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline WCHAR *strdupW( const WCHAR *src )
|
||||||
|
{
|
||||||
|
WCHAR *dst;
|
||||||
|
|
||||||
|
if (!src) return NULL;
|
||||||
|
dst = HeapAlloc( GetProcessHeap(), 0, (strlenW( src ) + 1) * sizeof(WCHAR) );
|
||||||
|
if (dst)
|
||||||
|
strcpyW( dst, src );
|
||||||
|
return dst;
|
||||||
|
}
|
||||||
|
|
||||||
static inline LPWSTR strAtoW( LPCSTR str )
|
static inline LPWSTR strAtoW( LPCSTR str )
|
||||||
{
|
{
|
||||||
LPWSTR ret = NULL;
|
LPWSTR ret = NULL;
|
||||||
|
|
Loading…
Reference in New Issue