Diff for /libraries/liblber/decode.c between versions 1.119 and 1.120

version 1.119, 2009/07/29 19:47:54 version 1.120, 2009/07/29 20:10:45
Line 1 Line 1
 /* decode.c - ber input decoding routines */  /* decode.c - ber input decoding routines */
 /* $OpenLDAP: pkg/ldap/libraries/liblber/decode.c,v 1.118 2009/07/29 13:06:28 hallvard Exp $ */  /* $OpenLDAP: pkg/ldap/libraries/liblber/decode.c,v 1.119 2009/07/29 19:47:54 hallvard Exp $ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.  /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *   *
  * Copyright 1998-2009 The OpenLDAP Foundation.   * Copyright 1998-2009 The OpenLDAP Foundation.
Line 411  ber_get_stringbvl( bgbvr *b, ber_len_t * Line 411  ber_get_stringbvl( bgbvr *b, ber_len_t *
                 case BvVec:                  case BvVec:
                         bvp = ber_memalloc_x( sizeof( struct berval ), b->ber->ber_memctx);                          bvp = ber_memalloc_x( sizeof( struct berval ), b->ber->ber_memctx);
                         if ( !bvp ) {                          if ( !bvp ) {
                                 LBER_FREE(bv.bv_val);                                  ber_memfree_x( bv.bv_val, b->ber->ber_memctx );
                                 goto nomem;                                  goto nomem;
                         }                          }
                         (*b->res.bv)[n] = bvp;                          (*b->res.bv)[n] = bvp;
Line 429  nomem: Line 429  nomem:
                 for (--n; n>=0; n--) {                  for (--n; n>=0; n--) {
                         switch(b->choice) {                          switch(b->choice) {
                         case ChArray:                          case ChArray:
                                 LBER_FREE((*b->res.c)[n]);                                  ber_memfree_x((*b->res.c)[n], b->ber->ber_memctx);
                                 break;                                  break;
                         case BvArray:                          case BvArray:
                                 LBER_FREE((*b->res.ba)[n].bv_val);                                  ber_memfree_x((*b->res.ba)[n].bv_val, b->ber->ber_memctx);
                                 break;                                  break;
                         case BvVec:                          case BvVec:
                                 LBER_FREE((*b->res.bv)[n]->bv_val);                                  ber_memfree_x((*b->res.bv)[n]->bv_val, b->ber->ber_memctx);
                                 LBER_FREE((*b->res.bv)[n]);                                  ber_memfree_x((*b->res.bv)[n], b->ber->ber_memctx);
                                 break;                                  break;
                         default:                          default:
                                 break;                                  break;
                         }                          }
                 }                  }
         }          }
         LBER_FREE(*b->res.c);          ber_memfree_x(*b->res.c, b->ber->ber_memctx);
         *b->res.c = NULL;          *b->res.c = NULL;
         return LBER_DEFAULT;          return LBER_DEFAULT;
 }  }
Line 471  ber_get_stringbv( BerElement *ber, struc Line 471  ber_get_stringbv( BerElement *ber, struc
                 if ( bv->bv_len > 0 && (ber_len_t) ber_read( ber, bv->bv_val,                  if ( bv->bv_len > 0 && (ber_len_t) ber_read( ber, bv->bv_val,
                         bv->bv_len ) != bv->bv_len )                          bv->bv_len ) != bv->bv_len )
                 {                  {
                         LBER_FREE( bv->bv_val );                          ber_memfree_x( bv->bv_val, ber->ber_memctx );
                         bv->bv_val = NULL;                          bv->bv_val = NULL;
                         return LBER_DEFAULT;                          return LBER_DEFAULT;
                 }                  }
Line 509  ber_get_stringbv_null( BerElement *ber, Line 509  ber_get_stringbv_null( BerElement *ber,
                 if ( bv->bv_len > 0 && (ber_len_t) ber_read( ber, bv->bv_val,                  if ( bv->bv_len > 0 && (ber_len_t) ber_read( ber, bv->bv_val,
                         bv->bv_len ) != bv->bv_len )                          bv->bv_len ) != bv->bv_len )
                 {                  {
                         LBER_FREE( bv->bv_val );                          ber_memfree_x( bv->bv_val, ber->ber_memctx );
                         bv->bv_val = NULL;                          bv->bv_val = NULL;
                         return LBER_DEFAULT;                          return LBER_DEFAULT;
                 }                  }
Line 568  ber_get_stringal( BerElement *ber, struc Line 568  ber_get_stringal( BerElement *ber, struc
   
         tag = ber_get_stringbv( ber, *bv, LBER_BV_ALLOC );          tag = ber_get_stringbv( ber, *bv, LBER_BV_ALLOC );
         if ( tag == LBER_DEFAULT ) {          if ( tag == LBER_DEFAULT ) {
                 LBER_FREE( *bv );                  ber_memfree_x( *bv, ber->ber_memctx );
                 *bv = NULL;                  *bv = NULL;
         }          }
         return tag;          return tag;
Line 607  ber_get_bitstringa( Line 607  ber_get_bitstringa(
         }          }
   
         if ( (ber_len_t) ber_read( ber, *buf, datalen ) != datalen ) {          if ( (ber_len_t) ber_read( ber, *buf, datalen ) != datalen ) {
                 LBER_FREE( buf );                  ber_memfree_x( buf, ber->ber_memctx );
                 *buf = NULL;                  *buf = NULL;
                 return LBER_DEFAULT;                  return LBER_DEFAULT;
         }          }
Line 894  ber_scanf ( BerElement *ber, Line 894  ber_scanf ( BerElement *ber,
                 case 'A':                  case 'A':
                         ss = va_arg( ap, char ** );                          ss = va_arg( ap, char ** );
                         if ( *ss ) {                          if ( *ss ) {
                                 LBER_FREE( *ss );                                  ber_memfree_x( *ss, ber->ber_memctx );
                                 *ss = NULL;                                  *ss = NULL;
                         }                          }
                         break;                          break;
Line 912  ber_scanf ( BerElement *ber, Line 912  ber_scanf ( BerElement *ber,
                 case 'o':       /* octet string in a supplied berval */                  case 'o':       /* octet string in a supplied berval */
                         bval = va_arg( ap, struct berval * );                          bval = va_arg( ap, struct berval * );
                         if ( bval->bv_val != NULL ) {                          if ( bval->bv_val != NULL ) {
                                 LBER_FREE( bval->bv_val );                                  ber_memfree_x( bval->bv_val, ber->ber_memctx );
                                 bval->bv_val = NULL;                                  bval->bv_val = NULL;
                         }                          }
                         bval->bv_len = 0;                          bval->bv_len = 0;
Line 939  ber_scanf ( BerElement *ber, Line 939  ber_scanf ( BerElement *ber,
                 case 'B':       /* bit string - allocate storage as needed */                  case 'B':       /* bit string - allocate storage as needed */
                         ss = va_arg( ap, char ** );                          ss = va_arg( ap, char ** );
                         if ( *ss ) {                          if ( *ss ) {
                                 LBER_FREE( *ss );                                  ber_memfree_x( *ss, ber->ber_memctx );
                                 *ss = NULL;                                  *ss = NULL;
                         }                          }
                         *(va_arg( ap, ber_len_t * )) = 0; /* for length, in bits */                          *(va_arg( ap, ber_len_t * )) = 0; /* for length, in bits */

Removed from v.1.119  
changed lines
  Added in v.1.120


______________
© Copyright 1998-2020, OpenLDAP Foundation, info@OpenLDAP.org