From b6bf9e2ea7e04eee6e197c6c89b043e85ff2a677 Mon Sep 17 00:00:00 2001 From: Andy Polyakov Date: Thu, 26 Nov 2009 20:52:08 +0000 Subject: [PATCH] bss_dgram.c: re-fix BIO_CTRL_DGRAM_GET_PEER. PR: 2110 --- crypto/bio/bss_dgram.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/crypto/bio/bss_dgram.c b/crypto/bio/bss_dgram.c index f63f1bf6fb..fa886af557 100644 --- a/crypto/bio/bss_dgram.c +++ b/crypto/bio/bss_dgram.c @@ -565,21 +565,23 @@ static long dgram_ctrl(BIO *b, int cmd, long num, void *ptr) } break; case BIO_CTRL_DGRAM_GET_PEER: - to = (struct sockaddr *) ptr; - switch (to->sa_family) + switch (data->peer.sa.sa_family) { case AF_INET: - memcpy(to,&data->peer,(ret=sizeof(data->peer.sa_in))); + ret=sizeof(data->peer.sa_in); break; #if OPENSSL_USE_IPV6 case AF_INET6: - memcpy(to,&data->peer,(ret=sizeof(data->peer.sa_in6))); + ret=sizeof(data->peer.sa_in6); break; #endif default: - memcpy(to,&data->peer,(ret=sizeof(data->peer.sa))); + ret=sizeof(data->peer.sa); break; } + if (num==0 || num>ret) + num=ret; + memcpy(ptr,&data->peer,(ret=num)); break; case BIO_CTRL_DGRAM_SET_PEER: to = (struct sockaddr *) ptr; -- 2.34.1