In asn1_d2i_read_bio, don't assume BIO_read will

return the requested number of bytes when reading
content.
This commit is contained in:
Dr. Stephen Henson 2002-12-03 23:50:59 +00:00
parent 1c3e4a3660
commit 2053c43de2
2 changed files with 15 additions and 5 deletions

View File

@ -335,6 +335,11 @@ TODO: bug: pad x with leading zeros if necessary
Changes between 0.9.6h and 0.9.7 [XX xxx 2002] Changes between 0.9.6h and 0.9.7 [XX xxx 2002]
*) In asn1_d2i_read_bio() repeatedly call BIO_read() until all content
octets have been read, EOF or an error occurs. Without this change
some truncated ASN1 structures will not produce an error.
[Steve Henson]
*) Disable Heimdal support, since it hasn't been fully implemented. *) Disable Heimdal support, since it hasn't been fully implemented.
Still give the possibility to force the use of Heimdal, but with Still give the possibility to force the use of Heimdal, but with
warnings and a request that patches get sent to openssl-dev. warnings and a request that patches get sent to openssl-dev.

View File

@ -226,13 +226,18 @@ static int asn1_d2i_read_bio(BIO *in, BUF_MEM **pb)
ASN1err(ASN1_F_ASN1_D2I_BIO,ERR_R_MALLOC_FAILURE); ASN1err(ASN1_F_ASN1_D2I_BIO,ERR_R_MALLOC_FAILURE);
goto err; goto err;
} }
i=BIO_read(in,&(b->data[len]),want); while (want > 0)
if (i <= 0)
{ {
ASN1err(ASN1_F_ASN1_D2I_BIO,ASN1_R_NOT_ENOUGH_DATA); i=BIO_read(in,&(b->data[len]),want);
goto err; if (i <= 0)
{
ASN1err(ASN1_F_ASN1_D2I_BIO,
ASN1_R_NOT_ENOUGH_DATA);
goto err;
}
len+=i;
want -= i;
} }
len+=i;
} }
off+=(int)c.slen; off+=(int)c.slen;
if (eos <= 0) if (eos <= 0)