Browse Source

Fix some malloc failures in b_addr.c

There were some unchecked calls to OPENSSL_strdup().

Reviewed-by: Richard Levitte <levitte@openssl.org>
master
Matt Caswell 6 years ago
parent
commit
24854e0117
1 changed files with 18 additions and 4 deletions
  1. +18
    -4
      crypto/bio/b_addr.c

+ 18
- 4
crypto/bio/b_addr.c View File

@ -228,21 +228,35 @@ static int addr_strings(const BIO_ADDR *ap, int numeric,
ntohs(BIO_ADDR_rawport(ap)));
}
if (hostname)
if (hostname != NULL)
*hostname = OPENSSL_strdup(host);
if (service)
if (service != NULL)
*service = OPENSSL_strdup(serv);
} else {
#endif
if (hostname)
if (hostname != NULL)
*hostname = OPENSSL_strdup(inet_ntoa(ap->s_in.sin_addr));
if (service) {
if (service != NULL) {
char serv[6]; /* port is 16 bits => max 5 decimal digits */
BIO_snprintf(serv, sizeof(serv), "%d", ntohs(ap->s_in.sin_port));
*service = OPENSSL_strdup(serv);
}
}
if ((hostname != NULL && *hostname == NULL)
|| (service != NULL && *service == NULL)) {
if (hostname != NULL) {
OPENSSL_free(*hostname);
*hostname = NULL;
}
if (service != NULL) {
OPENSSL_free(*service);
*service = NULL;
}
BIOerr(BIO_F_ADDR_STRINGS, ERR_R_MALLOC_FAILURE);
return 0;
}
return 1;
}


Loading…
Cancel
Save