mirror of
https://git.openldap.org/openldap/openldap.git
synced 2026-01-10 08:53:27 -05:00
More ITS#2490 - fix retries for multi-byte lengths
This commit is contained in:
parent
5eb0ec070c
commit
3fc96a24ee
1 changed files with 6 additions and 6 deletions
|
|
@ -557,13 +557,14 @@ ber_get_next(
|
|||
/* Now look for the length */
|
||||
if (*ber->ber_ptr & 0x80) { /* multi-byte */
|
||||
ber_len_t i;
|
||||
int llen = *(unsigned char *)ber->ber_ptr++ & 0x7f;
|
||||
unsigned char *p = (unsigned char *)ber->ber_ptr;
|
||||
int llen = *p++ & 0x7f;
|
||||
if (llen > (int)sizeof(ber_len_t)) {
|
||||
errno = ERANGE;
|
||||
return LBER_DEFAULT;
|
||||
}
|
||||
/* Not enough bytes? */
|
||||
if (ber->ber_rwptr - ber->ber_ptr < llen) {
|
||||
if (ber->ber_rwptr - (char *)p < llen) {
|
||||
#if defined( EWOULDBLOCK )
|
||||
errno = EWOULDBLOCK;
|
||||
#elif defined( EAGAIN )
|
||||
|
|
@ -571,13 +572,12 @@ ber_get_next(
|
|||
#endif
|
||||
return LBER_DEFAULT;
|
||||
}
|
||||
for (i=0;
|
||||
i<llen && ber->ber_ptr<ber->ber_rwptr;
|
||||
i++,ber->ber_ptr++)
|
||||
for (i=0; i<llen; i++)
|
||||
{
|
||||
tlen <<=8;
|
||||
tlen |= *(unsigned char *)ber->ber_ptr;
|
||||
tlen |= *p++;
|
||||
}
|
||||
ber->ber_ptr = p;
|
||||
} else {
|
||||
tlen = *(unsigned char *)ber->ber_ptr++;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue