X-Git-Url: https://git.openssl.org/gitweb/?a=blobdiff_plain;f=crypto%2Fbio%2Fb_sock.c;h=dc14a1b587059277cf979d95b7a43adf5f09b338;hb=ad9a05621ac75b6b9db1e8856d7f434276b1a7af;hp=071acda48e83e6fdbbaffa9b4f68c89ed44bc40b;hpb=d5975c8d5a171551dd42ffa18ca12e84f29ad106;p=openssl.git diff --git a/crypto/bio/b_sock.c b/crypto/bio/b_sock.c index 071acda48e..dc14a1b587 100644 --- a/crypto/bio/b_sock.c +++ b/crypto/bio/b_sock.c @@ -311,10 +311,20 @@ int BIO_accept(int sock, char **ip_port) if (ip_port != NULL) { char *host = BIO_ADDR_hostname_string(&res, 1); char *port = BIO_ADDR_service_string(&res, 1); - *ip_port = OPENSSL_zalloc(strlen(host) + strlen(port) + 2); - strcpy(*ip_port, host); - strcat(*ip_port, ":"); - strcat(*ip_port, port); + if (host != NULL && port != NULL) + *ip_port = OPENSSL_zalloc(strlen(host) + strlen(port) + 2); + else + *ip_port = NULL; + + if (*ip_port == NULL) { + BIOerr(BIO_F_BIO_ACCEPT, ERR_R_MALLOC_FAILURE); + BIO_closesocket(ret); + ret = (int)INVALID_SOCKET; + } else { + strcpy(*ip_port, host); + strcat(*ip_port, ":"); + strcat(*ip_port, port); + } OPENSSL_free(host); OPENSSL_free(port); }