Diff for /libraries/liblber/decode.c between versions 1.20 and 1.24

version 1.20, 1999/05/18 23:12:36 version 1.24, 1999/05/20 17:38:03
Line 71  ber_skip_tag( BerElement *ber, unsigned Line 71  ber_skip_tag( BerElement *ber, unsigned
 {  {
         unsigned long   tag;          unsigned long   tag;
         unsigned char   lc;          unsigned char   lc;
         int             noctets, diff;          unsigned int    noctets;
           int             diff;
         unsigned long   netlen;          unsigned long   netlen;
   
         assert( ber != NULL );          assert( ber != NULL );
Line 104  ber_skip_tag( BerElement *ber, unsigned Line 105  ber_skip_tag( BerElement *ber, unsigned
         *len = netlen = 0;          *len = netlen = 0;
         if ( ber_read( ber, (char *) &lc, 1 ) != 1 )          if ( ber_read( ber, (char *) &lc, 1 ) != 1 )
                 return( LBER_DEFAULT );                  return( LBER_DEFAULT );
         if ( lc & 0x80 ) {          if ( lc & 0x80U ) {
                 noctets = (lc & 0x7f);                  noctets = (lc & 0x7fU);
                 if ( (unsigned) noctets > sizeof(unsigned long) )                  if ( (unsigned) noctets > sizeof(unsigned long) )
                         return( LBER_DEFAULT );                          return( LBER_DEFAULT );
                 diff = sizeof(unsigned long) - noctets;                  diff = sizeof(unsigned long) - noctets;
                 if ( ber_read( ber, (char *) &netlen + diff, noctets )                  if ( (unsigned) ber_read( ber, (char *) &netlen + diff, noctets )
                     != noctets )                      != noctets )
                         return( LBER_DEFAULT );                          return( LBER_DEFAULT );
                 *len = AC_NTOHL( netlen );                  *len = AC_NTOHL( netlen );
Line 445  va_dcl Line 446  va_dcl
   
         fmt_reset = fmt;          fmt_reset = fmt;
   
         if ( ber->ber_debug ) {          ber_log_printf( LDAP_DEBUG_TRACE, ber->ber_debug,
                 ber_log_printf( LDAP_DEBUG_TRACE, ber->ber_debug,                  "ber_scanf fmt (%s) ber:\n", fmt );
                         "ber_scanf fmt (%s) ber:\n", fmt );          ber_log_dump( LDAP_DEBUG_BER, ber->ber_debug, ber, 1 );
                 ber_log_dump( LDAP_DEBUG_BER, ber->ber_debug, ber, 1 );  
         }  
   
         for ( rc = 0; *fmt && rc != LBER_DEFAULT; fmt++ ) {          for ( rc = 0; *fmt && rc != LBER_DEFAULT; fmt++ ) {
                 /* When this is modified, remember to update                  /* When this is modified, remember to update
Line 483  va_dcl Line 482  va_dcl
   
                 case 'l':       /* length of next item */                  case 'l':       /* length of next item */
                         l = va_arg( ap, long * );                          l = va_arg( ap, long * );
                         rc = ber_peek_tag( ber, (unsigned long *)l );                          rc = ber_peek_tag( ber, l );
                         break;                          break;
   
                 case 'n':       /* null */                  case 'n':       /* null */
Line 493  va_dcl Line 492  va_dcl
                 case 's':       /* octet string - in a buffer */                  case 's':       /* octet string - in a buffer */
                         s = va_arg( ap, char * );                          s = va_arg( ap, char * );
                         l = va_arg( ap, long * );                          l = va_arg( ap, long * );
                         rc = ber_get_stringb( ber, s, (unsigned long *)l );                          rc = ber_get_stringb( ber, s, l );
                         break;                          break;
   
                 case 'o':       /* octet string in a supplied berval */                  case 'o':       /* octet string in a supplied berval */
Line 510  va_dcl Line 509  va_dcl
                 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 ** );
                         l = va_arg( ap, long * ); /* for length, in bits */                          l = va_arg( ap, long * ); /* for length, in bits */
                         rc = ber_get_bitstringa( ber, ss, (unsigned long *)l );                          rc = ber_get_bitstringa( ber, ss, l );
                         break;                          break;
   
                 case 't':       /* tag of next item */                  case 't':       /* tag of next item */
                         i = va_arg( ap, int * );                          l = va_arg( ap, long * );
                         *i = rc = ber_peek_tag( ber, &len );                          *l = rc = ber_peek_tag( ber, &len );
                         break;                          break;
   
                 case 'T':       /* skip tag of next item */                  case 'T':       /* skip tag of next item */
                         i = va_arg( ap, int * );                          l = va_arg( ap, long * );
                         *i = rc = ber_skip_tag( ber, &len );                          *l = rc = ber_skip_tag( ber, &len );
                         break;                          break;
   
                 case 'v':       /* sequence of strings */                  case 'v':       /* sequence of strings */
Line 651  va_dcl Line 650  va_dcl
                         break;                          break;
   
                 case 'b':       /* boolean */                  case 'b':       /* boolean */
                 case 't':       /* tag of next item */  
                 case 'T':       /* skip tag of next item */  
                         (void) va_arg( ap, int * );                          (void) va_arg( ap, int * );
                         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 * );
                         /* Fall through */                          (void) va_arg( ap, long * );
                           break;
   
                 case 'e':       /* enumerated */                  case 'e':       /* enumerated */
                 case 'i':       /* int */                  case 'i':       /* int */
                 case 'l':       /* length of next item */                  case 'l':       /* length of next item */
                   case 't':       /* tag of next item */
                   case 'T':       /* skip tag of next item */
                         (void) va_arg( ap, long * );                          (void) va_arg( ap, long * );
                         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 ) {                          if ( bval->bv_val != NULL ) {
                                 free( bval->bv_val );                                  free( bval->bv_val );
                                 bval->bv_val = NULL;                                  bval->bv_val = NULL;
                         }                          }
Line 694  va_dcl Line 695  va_dcl
                 case 'v':       /* sequence of strings */                  case 'v':       /* sequence of strings */
                         sss = va_arg( ap, char *** );                          sss = va_arg( ap, char *** );
                         if ( *sss ) {                          if ( *sss ) {
                                 for (j = 0;  (*sss)[j];  j++)                                  for (j = 0;  (*sss)[j];  j++) {
                                         free( (*sss)[j] );                                          free( (*sss)[j] );
                                           (*sss)[j] = NULL;
                                   }
                                 free( *sss );                                  free( *sss );
                                 *sss = NULL;                                  *sss = NULL;
                         }                          }
Line 709  va_dcl Line 712  va_dcl
                         }                          }
                         break;                          break;
   
 #if 0           /* No action for these format characters */  
                 case 'n':       /* null */                  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 */
                 case '}':       /* end sequence */                  case '}':       /* end sequence */
                 case ']':       /* end set */                  case ']':       /* end set */
 #endif                          break;
   
                   default:
                           /* format should be good */
                           assert( 0 );
                 }                  }
             }              }
   

Removed from v.1.20  
changed lines
  Added in v.1.24


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