]> git.sur5r.net Git - openldap/blobdiff - libraries/libldap/getdn.c
ITS#3755 silence strict-aliasing warnings
[openldap] / libraries / libldap / getdn.c
index d7f5c54e9d94140644eb22d1a28460ee7019dec0..74f136524790638869c56443fa2b6b0be4212a61 100644 (file)
@@ -2016,7 +2016,7 @@ static int
 strval2strlen( struct berval *val, unsigned flags, ber_len_t *len )
 {
        ber_len_t       l, cl = 1;
-       char            *p;
+       char            *p, *end;
        int             escaped_byte_len = LDAP_DN_IS_PRETTY( flags ) ? 1 : 3;
 #ifdef PRETTY_ESCAPE
        int             escaped_ascii_len = LDAP_DN_IS_PRETTY( flags ) ? 2 : 3;
@@ -2030,7 +2030,8 @@ strval2strlen( struct berval *val, unsigned flags, ber_len_t *len )
                return( 0 );
        }
 
-       for ( l = 0, p = val->bv_val; p < val->bv_val + val->bv_len; p += cl ) {
+       end = val->bv_val + val->bv_len - 1;
+       for ( l = 0, p = val->bv_val; p <= end; p += cl ) {
 
                /* 
                 * escape '%x00' 
@@ -2059,7 +2060,7 @@ strval2strlen( struct berval *val, unsigned flags, ber_len_t *len )
                } else if ( LDAP_DN_NEEDESCAPE( p[ 0 ] )
                                || LDAP_DN_SHOULDESCAPE( p[ 0 ] )
                                || ( p == val->bv_val && LDAP_DN_NEEDESCAPE_LEAD( p[ 0 ] ) )
-                               || ( !p[ 1 ] && LDAP_DN_NEEDESCAPE_TRAIL( p[ 0 ] ) ) ) {
+                               || ( p == end && LDAP_DN_NEEDESCAPE_TRAIL( p[ 0 ] ) ) ) {
 #ifdef PRETTY_ESCAPE
 #if 0
                        if ( LDAP_DN_WILLESCAPE_HEX( flags, p[ 0 ] ) ) {
@@ -3369,7 +3370,7 @@ ldap_X509dn2bv( void *x509_name, struct berval *bv, LDAPDN_rewrite_func *func,
                if ( newDN == NULL )
                        return LDAP_NO_MEMORY;
        } else {
-               newDN = (LDAPDN)ptrs;
+               newDN = (LDAPDN)(char *)ptrs;
        }
        
        newDN[nrdns] = NULL;
@@ -3501,7 +3502,7 @@ nomem:
 
        if ( oidsize != 0 )
                LDAP_FREE( oidbuf );
-       if ( newDN != (LDAPDN) ptrs )
+       if ( newDN != (LDAPDN)(char *) ptrs )
                LDAP_FREE( newDN );
        return rc;
 }