Don't use msg on error.
[openssl.git] / crypto / bio / bss_dgram.c
index 25d5195bc22ea15755a8dbc42a465b7b755ef335..8a1eb6de8b2357a372b954830692aa026ff5f7d8 100644 (file)
          ((a)->s6_addr32[2] == htonl(0x0000ffff)))
 #endif
 
+#ifdef WATT32
+#define sock_write SockWrite  /* Watt-32 uses same names */
+#define sock_read  SockRead
+#define sock_puts  SockPuts
+#endif
+
 static int dgram_write(BIO *h, const char *buf, int num);
 static int dgram_read(BIO *h, char *buf, int size);
 static int dgram_puts(BIO *h, const char *str);
@@ -571,10 +577,10 @@ static long dgram_ctrl(BIO *b, int cmd, long num, void *ptr)
                        ret = -1;
                        break;
                        }
-               ret = -1;
 #else
-               break;
+               ret = -1;
 #endif
+               break;
        case BIO_CTRL_DGRAM_QUERY_MTU:
 #if defined(OPENSSL_SYS_LINUX) && defined(IP_MTU)
                addr_len = (socklen_t)sizeof(addr);
@@ -945,7 +951,7 @@ BIO *BIO_new_dgram_sctp(int fd, int close_flag)
         * already, otherwise the connected socket won't use it. */
        sockopt_len = (socklen_t)(sizeof(sctp_assoc_t) + 256 * sizeof(uint8_t));
        authchunks = OPENSSL_malloc(sockopt_len);
-       memset(authchunks, 0, sizeof(sockopt_len));
+       memset(authchunks, 0, sockopt_len);
        ret = getsockopt(fd, IPPROTO_SCTP, SCTP_LOCAL_AUTH_CHUNKS, authchunks, &sockopt_len);
        OPENSSL_assert(ret >= 0);
 
@@ -1076,6 +1082,13 @@ static int dgram_sctp_read(BIO *b, char *out, int outl)
                        msg.msg_flags = 0;
                        n = recvmsg(b->num, &msg, 0);
 
+                       if (n <= 0)
+                               {
+                               if (n < 0)
+                                       ret = n;
+                               break;
+                               }
+
                        if (msg.msg_controllen > 0)
                                {
                                for (cmsg = CMSG_FIRSTHDR(&msg); cmsg; cmsg = CMSG_NXTHDR(&msg, cmsg))
@@ -1115,13 +1128,6 @@ static int dgram_sctp_read(BIO *b, char *out, int outl)
                                        }
                                }
 
-                       if (n <= 0)
-                               {
-                               if (n < 0)
-                                       ret = n;
-                               break;
-                               }
-
                        if (msg.msg_flags & MSG_NOTIFICATION)
                                {
                                snp = (union sctp_notification*) out;
@@ -1235,7 +1241,7 @@ static int dgram_sctp_read(BIO *b, char *out, int outl)
 
                        optlen = (socklen_t)(sizeof(sctp_assoc_t) + 256 * sizeof(uint8_t));
                        authchunks = OPENSSL_malloc(optlen);
-                       memset(authchunks, 0, sizeof(optlen));
+                       memset(authchunks, 0, optlen);
                        ii = getsockopt(b->num, IPPROTO_SCTP, SCTP_PEER_AUTH_CHUNKS, authchunks, &optlen);
                        OPENSSL_assert(ii >= 0);