]> git.sur5r.net Git - openldap/blobdiff - libraries/liblber/decode.c
Fix assignment of <char/int>* to unsigned <char/int>* and vice versa.
[openldap] / libraries / liblber / decode.c
index 33f33b4c6d5efb2ad252ef1fe949fb714b15efa7..ae0b963b033614af71f9eaf62fb267db599f3fa7 100644 (file)
@@ -128,7 +128,7 @@ ber_skip_tag( BerElement *ber, ber_len_t *len )
                        return LBER_DEFAULT;
                }
 
-               if( (unsigned) ber_read( ber, netlen, noctets ) != noctets ) {
+               if( (unsigned) ber_read( ber, (char *) netlen, noctets ) != noctets ) {
                        return LBER_DEFAULT;
                }
 
@@ -315,15 +315,16 @@ ber_get_stringbvl( bgbvr *b, ber_len_t *rlen )
        char *last, *orig;
        struct berval bv, *bvp = NULL;
 
+       /* For rewinding, just like ber_peek_tag() */
        orig = b->ber->ber_ptr;
+       tag = b->ber->ber_tag;
 
-       tag = ber_first_element( b->ber, &len, &last );
-       if ( tag != LBER_DEFAULT ) {
+       if ( ber_first_element( b->ber, &len, &last ) != LBER_DEFAULT ) {
                for ( ; b->ber->ber_ptr < last; i++ )
                {
-                       tag = ber_skip_tag( b->ber, &len );
-                       if (tag == LBER_DEFAULT) break;
+                       if (ber_skip_tag( b->ber, &len ) == LBER_DEFAULT) break;
                        b->ber->ber_ptr += len;
+                       b->ber->ber_tag = *(unsigned char *)b->ber->ber_ptr;
                }
        }
 
@@ -340,25 +341,25 @@ ber_get_stringbvl( bgbvr *b, ber_len_t *rlen )
        /* Allocate the result vector */
        switch (b->choice) {
        case ChArray:
-               *b->res.c = LBER_MALLOC( (n+1) * sizeof( char * ));
+               *b->res.c = ber_memalloc_x( (n+1) * sizeof( char * ), b->ber->ber_memctx);
                if ( *b->res.c == NULL )
                        return LBER_DEFAULT;
                (*b->res.c)[n] = NULL;
                break;
        case BvArray:
-               *b->res.ba = LBER_MALLOC( (n+1) * sizeof( struct berval ));
+               *b->res.ba = ber_memalloc_x( (n+1) * sizeof( struct berval ), b->ber->ber_memctx);
                if ( *b->res.ba == NULL )
                        return LBER_DEFAULT;
                (*b->res.ba)[n].bv_val = NULL;
                break;
        case BvVec:
-               *b->res.bv = LBER_MALLOC( (n+1) * sizeof( struct berval *));
+               *b->res.bv = ber_memalloc_x( (n+1) * sizeof( struct berval *), b->ber->ber_memctx);
                if ( *b->res.bv == NULL )
                        return LBER_DEFAULT;
                (*b->res.bv)[n] = NULL;
                break;
        case BvOff:
-               *b->res.ba = LBER_MALLOC( (n+1) * b->siz );
+               *b->res.ba = ber_memalloc_x( (n+1) * b->siz, b->ber->ber_memctx );
                if ( *b->res.ba == NULL )
                        return LBER_DEFAULT;
                ((struct berval *)((long)(*b->res.ba) + n*b->siz +
@@ -366,6 +367,7 @@ ber_get_stringbvl( bgbvr *b, ber_len_t *rlen )
                break;
        }
        b->ber->ber_ptr = orig;
+       b->ber->ber_tag = tag;
        ber_skip_tag( b->ber, &len );
        
        for (n=0; n<i; n++)
@@ -383,7 +385,7 @@ ber_get_stringbvl( bgbvr *b, ber_len_t *rlen )
                        (*b->res.ba)[n] = bv;
                        break;
                case BvVec:
-                       bvp = LBER_MALLOC( sizeof( struct berval ));
+                       bvp = ber_memalloc_x( sizeof( struct berval ), b->ber->ber_memctx);
                        if ( !bvp ) {
                                LBER_FREE(bv.bv_val);
                                goto nomem;
@@ -407,6 +409,7 @@ nomem:
                        case BvArray: LBER_FREE((*b->res.ba)[n].bv_val); break;
                        case BvVec: LBER_FREE((*b->res.bv)[n]->bv_val);
                                LBER_FREE((*b->res.bv)[n]); break;
+                       default: break;
                        }
                }
        }
@@ -435,7 +438,7 @@ ber_get_stringbv( BerElement *ber, struct berval *bv, int alloc )
        }
 
        if ( alloc ) {
-               if ( (bv->bv_val = (char *) LBER_MALLOC( bv->bv_len + 1 )) == NULL ) {
+               if ( (bv->bv_val = (char *) ber_memalloc_x( bv->bv_len + 1, ber->ber_memctx )) == NULL ) {
                        return LBER_DEFAULT;
                }
 
@@ -477,7 +480,7 @@ ber_get_stringal( BerElement *ber, struct berval **bv )
        assert( ber != NULL );
        assert( bv != NULL );
 
-       *bv = (struct berval *) LBER_MALLOC( sizeof(struct berval) );
+       *bv = (struct berval *) ber_memalloc_x( sizeof(struct berval), ber->ber_memctx );
        if ( *bv == NULL ) {
                return LBER_DEFAULT;
        }
@@ -512,7 +515,7 @@ ber_get_bitstringa(
        }
        --datalen;
 
-       if ( (*buf = (char *) LBER_MALLOC( datalen )) == NULL ) {
+       if ( (*buf = (char *) ber_memalloc_x( datalen, ber->ber_memctx )) == NULL ) {
                return LBER_DEFAULT;
        }