]> git.sur5r.net Git - openldap/commitdiff
Rework stringal decode to return { NULL, 0 } bv's instead of { "", 0 }
authorKurt Zeilenga <kurt@openldap.org>
Mon, 2 Oct 2000 17:43:06 +0000 (17:43 +0000)
committerKurt Zeilenga <kurt@openldap.org>
Mon, 2 Oct 2000 17:43:06 +0000 (17:43 +0000)
when len is 0.

libraries/liblber/decode.c

index ef12bf46d61b64dc42dc2cee01d3b84c36121dc0..e55354f5e1b4140a26f4ed8631130a020257ddf9 100644 (file)
@@ -297,23 +297,33 @@ ber_get_stringal( BerElement *ber, struct berval **bv )
 
        if ( (tag = ber_skip_tag( ber, &len )) == LBER_DEFAULT ) {
                *bv = NULL;
-               return( LBER_DEFAULT );
+               return LBER_DEFAULT;
        }
 
-       if ( (*bv = (struct berval *) LBER_MALLOC( sizeof(struct berval) )) == NULL )
-               return( LBER_DEFAULT );
+       *bv = (struct berval *) LBER_MALLOC( sizeof(struct berval) );
+       if ( *bv == NULL ) {
+               return LBER_DEFAULT;
+       }
 
-       if ( ((*bv)->bv_val = (char *) LBER_MALLOC( len + 1 )) == NULL ) {
+       if( len == 0 ) {
+               (*bv)->bv_val = NULL;
+               (*bv)->bv_len = 0;
+               return tag;
+       }
+
+       (*bv)->bv_val = (char *) LBER_MALLOC( len + 1 );
+       if ( (*bv)->bv_val == NULL ) {
                LBER_FREE( *bv );
                *bv = NULL;
-               return( LBER_DEFAULT );
+               return LBER_DEFAULT;
        }
 
        if ( (ber_len_t) ber_read( ber, (*bv)->bv_val, len ) != len ) {
                ber_bvfree( *bv );
                *bv = NULL;
-               return( LBER_DEFAULT );
+               return LBER_DEFAULT;
        }
+
        ((*bv)->bv_val)[len] = '\0';
        (*bv)->bv_len = len;