提交 2053c43d 编写于 作者: D Dr. Stephen Henson

In asn1_d2i_read_bio, don't assume BIO_read will

return the requested number of bytes when reading
content.
上级 1c3e4a36
...@@ -335,6 +335,11 @@ TODO: bug: pad x with leading zeros if necessary ...@@ -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.
......
...@@ -226,13 +226,18 @@ static int asn1_d2i_read_bio(BIO *in, BUF_MEM **pb) ...@@ -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)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册