diff --git a/crypto/bio/b_addr.c b/crypto/bio/b_addr.c index 20cb66dce0cc10d2237b8a2757568bd0edbad2b8..f1ff5fe37c2a7f7a35428be02b3a683034b6c335 100644 --- a/crypto/bio/b_addr.c +++ b/crypto/bio/b_addr.c @@ -76,6 +76,7 @@ BIO_ADDR *BIO_ADDR_new(void) { BIO_ADDR *ret = (BIO_ADDR *)OPENSSL_zalloc(sizeof(BIO_ADDR)); + ret->sa.sa_family = AF_UNSPEC; return ret; } @@ -84,6 +85,12 @@ void BIO_ADDR_free(BIO_ADDR *ap) OPENSSL_free(ap); } +void BIO_ADDR_clear(BIO_ADDR *ap) +{ + memset(ap, 0, sizeof(*ap)); + ap->sa.sa_family = AF_UNSPEC; +} + /* * BIO_ADDR_make - non-public routine to fill a BIO_ADDR with the contents * of a struct sockaddr. diff --git a/doc/crypto/BIO_ADDR.pod b/doc/crypto/BIO_ADDR.pod index cec7dddd7e3547cb91a5d874035f36dfcbbcf6c5..a3c9b5cfaf46d06101af69c56974db805d67e561 100644 --- a/doc/crypto/BIO_ADDR.pod +++ b/doc/crypto/BIO_ADDR.pod @@ -2,7 +2,7 @@ =head1 NAME -BIO_ADDR, BIO_ADDR_new, BIO_ADDR_free, BIO_ADDR_rawmake, +BIO_ADDR, BIO_ADDR_new, BIO_ADDR_clear, BIO_ADDR_free, BIO_ADDR_rawmake, BIO_ADDR_family, BIO_ADDR_rawaddress, BIO_ADDR_rawport, BIO_ADDR_hostname_string, BIO_ADDR_service_string, BIO_ADDR_path_string - BIO_ADDR routines @@ -16,6 +16,7 @@ BIO_ADDR_path_string - BIO_ADDR routines BIO_ADDR *BIO_ADDR_new(void); void BIO_ADDR_free(BIO_ADDR *); + void BIO_ADDR_clear(BIO_ADDR *ap); int BIO_ADDR_rawmake(BIO_ADDR *ap, int family, const void *where, size_t wherelen, unsigned short port); int BIO_ADDR_family(const BIO_ADDR *ap); @@ -38,6 +39,9 @@ BIO_accept_ex(). BIO_ADDR_free() frees a B created with BIO_ADDR_new(). +BIO_ADDR_clear() clears any data held within the provided B and sets +it back to an uninitialised state. + BIO_ADDR_rawmake() takes a protocol B, an byte array of size B with an address in network byte order pointed at by B and a port number in network byte order in B (except @@ -50,7 +54,8 @@ I below>. BIO_ADDR_family() returns the protocol family of the given B. The possible non-error results are one of the -constants AF_INET, AF_INET6 and AF_UNIX. +constants AF_INET, AF_INET6 and AF_UNIX. It will also return AF_UNSPEC if the +BIO_ADDR has not been initialised. BIO_ADDR_rawaddress() will write the raw address of the given B in the area pointed at by B

if B

is non-NULL, diff --git a/include/openssl/bio.h b/include/openssl/bio.h index 2989218f7ae0063ffd247609738ac0817bc2e840..cfb7b0fd33aa4e705f671ac79d1aefabab2c74f3 100644 --- a/include/openssl/bio.h +++ b/include/openssl/bio.h @@ -713,6 +713,7 @@ BIO_ADDR *BIO_ADDR_new(void); int BIO_ADDR_rawmake(BIO_ADDR *ap, int family, const void *where, size_t wherelen, unsigned short port); void BIO_ADDR_free(BIO_ADDR *); +void BIO_ADDR_clear(BIO_ADDR *ap); int BIO_ADDR_family(const BIO_ADDR *ap); int BIO_ADDR_rawaddress(const BIO_ADDR *ap, void *p, size_t *l); unsigned short BIO_ADDR_rawport(const BIO_ADDR *ap);