diff options
author | Andy Polyakov <appro@openssl.org> | 2009-11-26 20:56:05 +0000 |
---|---|---|
committer | Andy Polyakov <appro@openssl.org> | 2009-11-26 20:56:05 +0000 |
commit | 8b9b23603f742e8d562c054eb5a88a6681003c78 (patch) | |
tree | 677765a998e79d6c8f5a89bae597616308b1029d /crypto/bio | |
parent | aefb9dc5e5c8263c707e46e5171c1a8737ff8f28 (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.c | 12 |
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; |