mirror of
https://github.com/apache/httpd.git
synced 2025-08-08 15:02:10 +03:00
check BIO_read return values
submitted by Jiasheng Jiang bz #65922 git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1910268 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
@@ -187,12 +187,16 @@ BOOL modssl_X509_getBC(X509 *cert, int *ca, int *pathlen)
|
|||||||
|
|
||||||
char *modssl_bio_free_read(apr_pool_t *p, BIO *bio)
|
char *modssl_bio_free_read(apr_pool_t *p, BIO *bio)
|
||||||
{
|
{
|
||||||
int len = BIO_pending(bio);
|
int len = BIO_pending(bio), tmp;
|
||||||
char *result = NULL;
|
char *result = NULL;
|
||||||
|
|
||||||
if (len > 0) {
|
if (len > 0) {
|
||||||
result = apr_palloc(p, len+1);
|
result = apr_palloc(p, len+1);
|
||||||
len = BIO_read(bio, result, len);
|
tmp = len;
|
||||||
|
if ((len = BIO_read(bio, result, len)) != tmp) {
|
||||||
|
BIO_free(bio);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
result[len] = NUL;
|
result[len] = NUL;
|
||||||
}
|
}
|
||||||
BIO_free(bio);
|
BIO_free(bio);
|
||||||
@@ -236,7 +240,7 @@ char *modssl_X509_NAME_to_string(apr_pool_t *p, X509_NAME *dn, int maxlen)
|
|||||||
{
|
{
|
||||||
char *result = NULL;
|
char *result = NULL;
|
||||||
BIO *bio;
|
BIO *bio;
|
||||||
int len;
|
int len, tmp;
|
||||||
|
|
||||||
if ((bio = BIO_new(BIO_s_mem())) == NULL)
|
if ((bio = BIO_new(BIO_s_mem())) == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
@@ -245,13 +249,20 @@ char *modssl_X509_NAME_to_string(apr_pool_t *p, X509_NAME *dn, int maxlen)
|
|||||||
if (len > 0) {
|
if (len > 0) {
|
||||||
result = apr_palloc(p, (maxlen > 0) ? maxlen+1 : len+1);
|
result = apr_palloc(p, (maxlen > 0) ? maxlen+1 : len+1);
|
||||||
if (maxlen > 0 && maxlen < len) {
|
if (maxlen > 0 && maxlen < len) {
|
||||||
len = BIO_read(bio, result, maxlen);
|
if ((len = BIO_read(bio, result, maxlen)) != maxlen) {
|
||||||
|
BIO_free(bio);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
if (maxlen > 2) {
|
if (maxlen > 2) {
|
||||||
/* insert trailing ellipsis if there's enough space */
|
/* insert trailing ellipsis if there's enough space */
|
||||||
apr_snprintf(result + maxlen - 3, 4, "...");
|
apr_snprintf(result + maxlen - 3, 4, "...");
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
len = BIO_read(bio, result, len);
|
tmp = len;
|
||||||
|
if ((len = BIO_read(bio, result, len)) != tmp) {
|
||||||
|
BIO_free(bio);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
result[len] = NUL;
|
result[len] = NUL;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user