Diff for /libraries/liblber/decode.c between versions 1.101.2.2 and 1.107

version 1.101.2.2, 2005/11/14 18:06:06 version 1.107, 2007/03/20 14:10:16
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.101.2.1 2005/01/20 18:03:49 kurt Exp $ */  /* $OpenLDAP: pkg/ldap/libraries/liblber/decode.c,v 1.106 2007/01/02 19:00:57 kurt 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-2005 The OpenLDAP Foundation.   * Copyright 1998-2007 The OpenLDAP Foundation.
  * All rights reserved.   * All rights reserved.
  *   *
  * Redistribution and use in source and binary forms, with or without   * Redistribution and use in source and binary forms, with or without
Line 45  static ber_len_t ber_getnint LDAP_P(( Line 45  static ber_len_t ber_getnint LDAP_P((
         ber_int_t *num,          ber_int_t *num,
         ber_len_t len ));          ber_len_t len ));
   
   /* out->bv_len should be the buffer size on input */
   int
   ber_decode_oid( BerValue *in, BerValue *out )
   {
           unsigned char *der = in->bv_val;
           unsigned long val, val1;
           int i, len;
           char *ptr;
   
           assert( in != NULL );
           assert( out != NULL );
   
           /* expands by 5/2, and we add dots - call it 3 */
           if ( !out->bv_val || out->bv_len < in->bv_len * 3 )
                   return -1;
   
           val1 = der[0] / 40;
           val = der[0] - val1 * 40;
   
           len = sprintf( out->bv_val, "%ld.%ld", val1, val );
           ptr = out->bv_val + len;
           val = 0;
           for ( i=1; i<in->bv_len; i++ ) {
                   val = val << 7;
                   val |= der[i] & 0x7f;
                   if ( !( der[i] & 0x80 )) {
                           ptr += sprintf( ptr, ".%ld", val );
                           val = 0;
                   }
           }
           out->bv_len = ptr - out->bv_val;
           return 0;
   }
   
 /* return the tag - LBER_DEFAULT returned means trouble */  /* return the tag - LBER_DEFAULT returned means trouble */
 ber_tag_t  ber_tag_t
 ber_get_tag( BerElement *ber )  ber_get_tag( BerElement *ber )
Line 479  ber_get_stringbv( BerElement *ber, struc Line 513  ber_get_stringbv( BerElement *ber, struc
         return tag;          return tag;
 }  }
   
 #ifdef LDAP_NULL_IS_NULL  
 ber_tag_t  ber_tag_t
 ber_get_stringbv_null( BerElement *ber, struct berval *bv, int alloc )  ber_get_stringbv_null( BerElement *ber, struct berval *bv, int alloc )
 {  {
Line 528  ber_get_stringbv_null( BerElement *ber, Line 561  ber_get_stringbv_null( BerElement *ber,
   
         return tag;          return tag;
 }  }
 #endif /* LDAP_NULL_IS_NULL */  
   
 ber_tag_t  ber_tag_t
 ber_get_stringa( BerElement *ber, char **buf )  ber_get_stringa( BerElement *ber, char **buf )
Line 544  ber_get_stringa( BerElement *ber, char * Line 576  ber_get_stringa( BerElement *ber, char *
         return tag;          return tag;
 }  }
   
 #ifdef LDAP_NULL_IS_NULL  
 ber_tag_t  ber_tag_t
 ber_get_stringa_null( BerElement *ber, char **buf )  ber_get_stringa_null( BerElement *ber, char **buf )
 {  {
Line 558  ber_get_stringa_null( BerElement *ber, c Line 589  ber_get_stringa_null( BerElement *ber, c
   
         return tag;          return tag;
 }  }
 #endif /* LDAP_NULL_IS_NULL */  
   
 ber_tag_t  ber_tag_t
 ber_get_stringal( BerElement *ber, struct berval **bv )  ber_get_stringal( BerElement *ber, struct berval **bv )
Line 759  ber_scanf ( BerElement *ber, Line 789  ber_scanf ( BerElement *ber,
                         rc = ber_get_stringa( ber, ss );                          rc = ber_get_stringa( ber, ss );
                         break;                          break;
   
 #ifdef LDAP_NULL_IS_NULL  
                 case 'A':       /* octet string - allocate storage as needed,                  case 'A':       /* octet string - allocate storage as needed,
                                  * but return NULL if len == 0 */                                   * but return NULL if len == 0 */
                         ss = va_arg( ap, char ** );                          ss = va_arg( ap, char ** );
                         rc = ber_get_stringa_null( ber, ss );                          rc = ber_get_stringa_null( ber, ss );
                         break;                          break;
 #endif /* LDAP_NULL_IS_NULL */  
   
                 case 'b':       /* boolean */                  case 'b':       /* boolean */
                         i = va_arg( ap, ber_int_t * );                          i = va_arg( ap, ber_int_t * );
Line 920  ber_scanf ( BerElement *ber, Line 948  ber_scanf ( BerElement *ber,
                         } break;                          } break;
   
                 case 'a':       /* octet string - allocate storage as needed */                  case 'a':       /* octet string - allocate storage as needed */
 #ifdef LDAP_NULL_IS_NULL  
                 case 'A':                  case 'A':
 #endif /* LDAP_NULL_IS_NULL */  
                         ss = va_arg( ap, char ** );                          ss = va_arg( ap, char ** );
                         if ( *ss ) {                          if ( *ss ) {
                                 LBER_FREE( *ss );                                  LBER_FREE( *ss );

Removed from v.1.101.2.2  
changed lines
  Added in v.1.107


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