bss_dgram.c: re-fix BIO_CTRL_DGRAM_GET_PEER.
authorAndy Polyakov <appro@openssl.org>
Thu, 26 Nov 2009 20:52:08 +0000 (20:52 +0000)
committerAndy Polyakov <appro@openssl.org>
Thu, 26 Nov 2009 20:52:08 +0000 (20:52 +0000)
PR: 2110

crypto/bio/bss_dgram.c

index f63f1bf6fba060f24166ba849186eea1e2c4b67a..fa886af55785a782f1d7e06730828f54e1aee510 100644 (file)
@@ -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;