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

version 1.120, 2009/07/29 20:10:45 version 1.121, 2009/07/29 20:38:19
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.119 2009/07/29 19:47:54 hallvard Exp $ */  /* $OpenLDAP: pkg/ldap/libraries/liblber/decode.c,v 1.120 2009/07/29 20:10:45 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 686  ber_scanf ( BerElement *ber, Line 686  ber_scanf ( BerElement *ber,
 {  {
         va_list         ap;          va_list         ap;
         LDAP_CONST char         *fmt_reset;          LDAP_CONST char         *fmt_reset;
         char            *s, **ss;          char            *s, **ss, ***sss;
         struct berval   **bvp, *bval;          struct berval   *bval, **bvp, ***bvpp;
         ber_int_t       *i;          ber_int_t       *i;
         ber_len_t       *l;          ber_len_t       *l;
         ber_tag_t       *t;          ber_tag_t       *t;
Line 893  ber_scanf ( BerElement *ber, Line 893  ber_scanf ( BerElement *ber,
                 case 'a':       /* octet string - allocate storage as needed */                  case 'a':       /* octet string - allocate storage as needed */
                 case 'A':                  case 'A':
                         ss = va_arg( ap, char ** );                          ss = va_arg( ap, char ** );
                         if ( *ss ) {                          ber_memfree_x( *ss, ber->ber_memctx );
                                 ber_memfree_x( *ss, ber->ber_memctx );                          *ss = NULL;
                                 *ss = NULL;  
                         }  
                         break;                          break;
   
                 case 'b':       /* boolean */                  case 'b':       /* boolean */
Line 906  ber_scanf ( BerElement *ber, Line 904  ber_scanf ( BerElement *ber,
                         break;                          break;
   
                 case 'l':       /* length of next item */                  case 'l':       /* length of next item */
                         (void) va_arg( ap, ber_len_t * );                          *(va_arg( ap, ber_len_t * )) = 0;
                           break;
   
                   case 'm':       /* berval in-place */
                           bval = va_arg( ap, struct berval * );
                           BER_BVZERO( bval );
                           break;
   
                   case 'M':       /* BVoff array in-place */
                           bvp = va_arg( ap, struct berval ** );
                           ber_memfree_x( bvp, ber->ber_memctx );
                           *bvp = NULL;
                           *(va_arg( ap, ber_len_t * )) = 0;
                           (void) va_arg( ap, ber_len_t );
                         break;                          break;
   
                 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 ) {                          ber_memfree_x( bval->bv_val, ber->ber_memctx );
                                 ber_memfree_x( bval->bv_val, ber->ber_memctx );                          BER_BVZERO( bval );
                                 bval->bv_val = NULL;  
                         }  
                         bval->bv_len = 0;  
                         break;                          break;
   
                 case 'O':       /* octet string - allocate & include length */                  case 'O':       /* octet string - allocate & include length */
                         bvp = va_arg( ap, struct berval ** );                          bvp = va_arg( ap, struct berval ** );
                         if ( *bvp ) {                          ber_bvfree_x( *bvp, ber->ber_memctx );
                                 ber_bvfree( *bvp );                          *bvp = NULL;
                                 *bvp = NULL;  
                         }  
                         break;                          break;
   
                 case 's':       /* octet string - in a buffer */                  case 's':       /* octet string - in a buffer */
                         (void) va_arg( ap, char * );                          (void) va_arg( ap, char * );
                         (void) va_arg( ap, ber_len_t * );                          *(va_arg( ap, ber_len_t * )) = 0;
                         break;                          break;
   
                 case 't':       /* tag of next item */                  case 't':       /* tag of next item */
Line 938  ber_scanf ( BerElement *ber, Line 944  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 ) {                          ber_memfree_x( *ss, ber->ber_memctx );
                                 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 */
                         break;                          break;
   
                 case 'm':       /* berval in-place */  
                 case 'M':       /* BVoff array in-place */  
                 case 'n':       /* null */  
                 case 'v':       /* sequence of strings */                  case 'v':       /* sequence of strings */
                           sss = va_arg( ap, char *** );
                           ber_memvfree_x( (void **) *sss, ber->ber_memctx );
                           *sss = NULL;
                           break;
   
                 case 'V':       /* sequence of strings + lengths */                  case 'V':       /* sequence of strings + lengths */
                           bvpp = va_arg( ap, struct berval *** );
                           ber_bvecfree_x( *bvpp, ber->ber_memctx );
                           *bvpp = NULL;
                           break;
   
                 case 'W':       /* BerVarray */                  case 'W':       /* BerVarray */
                           bvp = va_arg( ap, struct berval ** );
                           ber_bvarray_free_x( *bvp, ber->ber_memctx );
                           *bvp = NULL;
                           break;
   
                   case 'n':       /* null */
                 case 'x':       /* skip the next element - whatever it is */                  case 'x':       /* skip the next element - whatever it is */
                 case '{':       /* begin sequence */                  case '{':       /* begin sequence */
                 case '[':       /* begin set */                  case '[':       /* begin set */

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


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