summaryrefslogtreecommitdiffstats
path: root/crypto/bio
diff options
context:
space:
mode:
authorAndy Polyakov <appro@openssl.org>2009-11-26 20:56:05 +0000
committerAndy Polyakov <appro@openssl.org>2009-11-26 20:56:05 +0000
commit8b9b23603f742e8d562c054eb5a88a6681003c78 (patch)
tree677765a998e79d6c8f5a89bae597616308b1029d /crypto/bio
parentaefb9dc5e5c8263c707e46e5171c1a8737ff8f28 (diff)
bss_dgram.c: re-fix BIO_CTRL_DGRAM_GET_PEER (from HEAD).
Diffstat (limited to 'crypto/bio')
-rw-r--r--crypto/bio/bss_dgram.c12
1 files 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;