version 1.125, 2009/08/07 17:15:26
|
version 1.126, 2009/08/07 17:26:11
|
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.124 2009/08/07 14:04:25 hallvard Exp $ */ |
/* $OpenLDAP: pkg/ldap/libraries/liblber/decode.c,v 1.125 2009/08/07 17:15:26 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 366 ber_get_stringbvl( BerElement *ber, bgbv
|
Line 366 ber_get_stringbvl( BerElement *ber, bgbv
|
char *bo; /* BvOff */ |
char *bo; /* BvOff */ |
} res; |
} res; |
|
|
/* For rewinding, just like ber_peek_tag() */ |
tag = ber_skip_tag( ber, &bv.bv_len ); |
orig = ber->ber_ptr; |
|
tag = ber->ber_tag; |
if ( tag != LBER_DEFAULT ) { |
|
tag = 0; |
|
orig = ber->ber_ptr; |
|
last = orig + bv.bv_len; |
|
|
if ( ber_first_element( ber, &bv.bv_len, &last ) != LBER_DEFAULT ) { |
|
for ( ; ber->ber_ptr < last; i++, tot_size += siz ) { |
for ( ; ber->ber_ptr < last; i++, tot_size += siz ) { |
if ( ber_skip_element( ber, &bv ) == LBER_DEFAULT ) |
if ( ber_skip_element( ber, &bv ) == LBER_DEFAULT ) |
break; |
break; |
} |
} |
|
if ( ber->ber_ptr != last ) { |
|
i = 0; |
|
tag = LBER_DEFAULT; |
|
} |
|
|
|
ber->ber_ptr = orig; |
|
ber->ber_tag = *(unsigned char *) orig; |
} |
} |
|
|
b->siz = i; |
b->siz = i; |
if ( i == 0 ) { |
if ( i == 0 ) { |
return 0; |
return tag; |
} |
} |
|
|
/* Allocate and NULL-terminate the result vector */ |
/* Allocate and NULL-terminate the result vector */ |
Line 406 ber_get_stringbvl( BerElement *ber, bgbv
|
Line 415 ber_get_stringbvl( BerElement *ber, bgbv
|
tot_size = 0; |
tot_size = 0; |
break; |
break; |
} |
} |
ber->ber_ptr = orig; |
|
ber->ber_tag = tag; |
|
ber_skip_tag( ber, &bv.bv_len ); |
|
|
|
n = 0; |
n = 0; |
do { |
do { |
tag = ber_next_element( ber, &bv.bv_len, last ); |
tag = ber_get_stringbv( ber, &bv, b->alloc ); |
if ( ber_get_stringbv( ber, &bv, b->alloc ) == LBER_DEFAULT ) { |
if ( tag == LBER_DEFAULT ) { |
goto nomem; |
goto nomem; |
} |
} |
|
|