]> git.sur5r.net Git - openldap/blobdiff - libraries/libldap/getdn.c
Fix ITS#1843, don't deref NULL string in ldap_pvt_str2upper
[openldap] / libraries / libldap / getdn.c
index 3b188eb20350c488c2d469f3f348255f216424fc..4dd2279ee5fd0ab31748b52fb4eca7e39aa5c5cf 100644 (file)
@@ -90,10 +90,9 @@ ldap_get_dn( LDAP *ld, LDAPMessage *entry )
        Debug( LDAP_DEBUG_TRACE, "ldap_get_dn\n", 0, 0, 0 );
 #endif
 
-       if ( entry == NULL ) {
-               ld->ld_errno = LDAP_PARAM_ERROR;
-               return( NULL );
-       }
+       assert( ld != NULL );
+       assert( LDAP_VALID(ld) );
+       assert( entry != NULL );
 
        tmp = *entry->lm_ber;   /* struct copy */
        if ( ber_scanf( &tmp, "{a" /*}*/, &dn ) == LBER_ERROR ) {
@@ -2878,7 +2877,7 @@ ldap_rdn2bv( LDAPRDN *rdn, struct berval *bv, unsigned flags )
                break;
 
        default:
-               return( LDAP_PARAM_ERROR );
+               return LDAP_PARAM_ERROR;
        }
 
        bv->bv_val = LDAP_MALLOC( l + 1 );
@@ -3321,10 +3320,10 @@ ldap_X509dn2bv( void *x509_name, struct berval *bv, LDAPDN_rewrite_func *func,
        X509_NAME_ENTRY *ne;
        ASN1_OBJECT *obj;
        ASN1_STRING *str;
-       char oids[8192], *oidptr = oids, *oidbuf;
+       char oids[8192], *oidptr = oids, *oidbuf = NULL;
        void *ptrs[2048];
-       int i, j, k, navas, nrdns, rc = LDAP_SUCCESS;
-       int set = 0;
+       int i, j, k = 0, navas, nrdns, rc = LDAP_SUCCESS;
+       int set = -1;
        size_t dnsize, oidrem = sizeof(oids), oidsize = 0;
        int csize;
 
@@ -3382,6 +3381,8 @@ ldap_X509dn2bv( void *x509_name, struct berval *bv, LDAPDN_rewrite_func *func,
                        k = 0;
                        set = ne->set;
                }
+               newAVA->la_private = NULL;
+               newAVA->la_flags = LDAP_AVA_STRING;
 
                if ( !func ) {
                        int n = OBJ_obj2nid( obj );