Skip to content
Snippets Groups Projects
Commit 68fb44b4 authored by Kurt Zeilenga's avatar Kurt Zeilenga
Browse files

Fix initialization bug in ber_init_w_nullc()

Added assert(), additional comments, and a few minor adjustments.
parent 042898d2
No related branches found
No related tags found
No related merge requests found
...@@ -127,7 +127,11 @@ ber_peek_tag( ...@@ -127,7 +127,11 @@ ber_peek_tag(
unsigned long *len ) unsigned long *len )
{ {
unsigned long tag; unsigned long tag;
BerElement *ber = ber_dup( ber_in ); BerElement *ber;
assert( ber_in != NULL );
ber = ber_dup( ber_in );
if( ber == NULL ) { if( ber == NULL ) {
return LBER_ERROR; return LBER_ERROR;
...@@ -183,6 +187,8 @@ ber_get_int( BerElement *ber, long *num ) ...@@ -183,6 +187,8 @@ ber_get_int( BerElement *ber, long *num )
{ {
unsigned long tag, len; unsigned long tag, len;
assert( ber != NULL );
if ( (tag = ber_skip_tag( ber, &len )) == LBER_DEFAULT ) if ( (tag = ber_skip_tag( ber, &len )) == LBER_DEFAULT )
return( LBER_DEFAULT ); return( LBER_DEFAULT );
...@@ -200,6 +206,8 @@ ber_get_stringb( BerElement *ber, char *buf, unsigned long *len ) ...@@ -200,6 +206,8 @@ ber_get_stringb( BerElement *ber, char *buf, unsigned long *len )
char *transbuf; char *transbuf;
#endif /* STR_TRANSLATION */ #endif /* STR_TRANSLATION */
assert( ber != NULL );
if ( (tag = ber_skip_tag( ber, &datalen )) == LBER_DEFAULT ) if ( (tag = ber_skip_tag( ber, &datalen )) == LBER_DEFAULT )
return( LBER_DEFAULT ); return( LBER_DEFAULT );
if ( datalen > (*len - 1) ) if ( datalen > (*len - 1) )
...@@ -238,6 +246,9 @@ ber_get_stringa( BerElement *ber, char **buf ) ...@@ -238,6 +246,9 @@ ber_get_stringa( BerElement *ber, char **buf )
{ {
unsigned long datalen, tag; unsigned long datalen, tag;
assert( ber != NULL );
assert( buf != NULL );
if ( (tag = ber_skip_tag( ber, &datalen )) == LBER_DEFAULT ) { if ( (tag = ber_skip_tag( ber, &datalen )) == LBER_DEFAULT ) {
*buf = NULL; *buf = NULL;
return( LBER_DEFAULT ); return( LBER_DEFAULT );
...@@ -274,6 +285,9 @@ ber_get_stringal( BerElement *ber, struct berval **bv ) ...@@ -274,6 +285,9 @@ ber_get_stringal( BerElement *ber, struct berval **bv )
{ {
unsigned long len, tag; unsigned long len, tag;
assert( ber != NULL );
assert( bv != NULL );
if ( (tag = ber_skip_tag( ber, &len )) == LBER_DEFAULT ) { if ( (tag = ber_skip_tag( ber, &len )) == LBER_DEFAULT ) {
*bv = NULL; *bv = NULL;
return( LBER_DEFAULT ); return( LBER_DEFAULT );
...@@ -319,6 +333,10 @@ ber_get_bitstringa( BerElement *ber, char **buf, unsigned long *blen ) ...@@ -319,6 +333,10 @@ ber_get_bitstringa( BerElement *ber, char **buf, unsigned long *blen )
unsigned long datalen, tag; unsigned long datalen, tag;
unsigned char unusedbits; unsigned char unusedbits;
assert( ber != NULL );
assert( buf != NULL );
assert( blen != NULL );
if ( (tag = ber_skip_tag( ber, &datalen )) == LBER_DEFAULT ) { if ( (tag = ber_skip_tag( ber, &datalen )) == LBER_DEFAULT ) {
*buf = NULL; *buf = NULL;
return( LBER_DEFAULT ); return( LBER_DEFAULT );
...@@ -349,6 +367,8 @@ ber_get_null( BerElement *ber ) ...@@ -349,6 +367,8 @@ ber_get_null( BerElement *ber )
{ {
unsigned long len, tag; unsigned long len, tag;
assert( ber != NULL );
if ( (tag = ber_skip_tag( ber, &len )) == LBER_DEFAULT ) if ( (tag = ber_skip_tag( ber, &len )) == LBER_DEFAULT )
return( LBER_DEFAULT ); return( LBER_DEFAULT );
...@@ -364,6 +384,9 @@ ber_get_boolean( BerElement *ber, int *boolval ) ...@@ -364,6 +384,9 @@ ber_get_boolean( BerElement *ber, int *boolval )
long longbool; long longbool;
int rc; int rc;
assert( ber != NULL );
assert( boolval != NULL );
rc = ber_get_int( ber, &longbool ); rc = ber_get_int( ber, &longbool );
*boolval = longbool; *boolval = longbool;
...@@ -373,6 +396,10 @@ ber_get_boolean( BerElement *ber, int *boolval ) ...@@ -373,6 +396,10 @@ ber_get_boolean( BerElement *ber, int *boolval )
unsigned long unsigned long
ber_first_element( BerElement *ber, unsigned long *len, char **last ) ber_first_element( BerElement *ber, unsigned long *len, char **last )
{ {
assert( ber != NULL );
assert( len != NULL );
assert( last != NULL );
/* skip the sequence header, use the len to mark where to stop */ /* skip the sequence header, use the len to mark where to stop */
if ( ber_skip_tag( ber, len ) == LBER_DEFAULT ) { if ( ber_skip_tag( ber, len ) == LBER_DEFAULT ) {
*last = NULL; *last = NULL;
...@@ -395,6 +422,10 @@ ber_first_element( BerElement *ber, unsigned long *len, char **last ) ...@@ -395,6 +422,10 @@ ber_first_element( BerElement *ber, unsigned long *len, char **last )
unsigned long unsigned long
ber_next_element( BerElement *ber, unsigned long *len, char *last ) ber_next_element( BerElement *ber, unsigned long *len, char *last )
{ {
assert( ber != NULL );
assert( len != NULL );
assert( last != NULL );
if ( ber->ber_ptr == last ) { if ( ber->ber_ptr == last ) {
#ifdef LBER_END_SEQORSET #ifdef LBER_END_SEQORSET
return( LBER_END_SEQORSET ); return( LBER_END_SEQORSET );
...@@ -431,8 +462,6 @@ va_dcl ...@@ -431,8 +462,6 @@ va_dcl
long *l; long *l;
unsigned long rc, tag, len; unsigned long rc, tag, len;
assert( ber != NULL );
#ifdef HAVE_STDARG #ifdef HAVE_STDARG
va_start( ap, fmt ); va_start( ap, fmt );
#else #else
......
...@@ -240,13 +240,13 @@ ber_alloc_t( int options ) ...@@ -240,13 +240,13 @@ ber_alloc_t( int options )
} }
BerElement * BerElement *
ber_alloc( void ) ber_alloc( void ) /* deprecated */
{ {
return( ber_alloc_t( 0 ) ); return( ber_alloc_t( 0 ) );
} }
BerElement * BerElement *
der_alloc( void ) der_alloc( void ) /* deprecated */
{ {
return( ber_alloc_t( LBER_USE_DER ) ); return( ber_alloc_t( LBER_USE_DER ) );
} }
...@@ -258,8 +258,9 @@ ber_dup( LDAP_CONST BerElement *ber ) ...@@ -258,8 +258,9 @@ ber_dup( LDAP_CONST BerElement *ber )
assert( ber != NULL ); assert( ber != NULL );
if ( (new = ber_alloc()) == NULL ) if ( (new = ber_alloc_t( ber->ber_options )) == NULL ) {
return( NULL ); return( NULL );
}
*new = *ber; *new = *ber;
...@@ -276,6 +277,7 @@ ber_init_w_nullc( BerElement *ber, int options ) ...@@ -276,6 +277,7 @@ ber_init_w_nullc( BerElement *ber, int options )
(void) memset( (char *)ber, '\0', sizeof( BerElement )); (void) memset( (char *)ber, '\0', sizeof( BerElement ));
ber->ber_tag = LBER_DEFAULT; ber->ber_tag = LBER_DEFAULT;
ber->ber_options = (char) options; ber->ber_options = (char) options;
ber->ber_debug = ber_int_debug;
} }
/* New C-API ber_init() */ /* New C-API ber_init() */
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment