Browse Source

Code review changes

Juliusz Sosinowicz 2 years ago
parent
commit
dd4adacee8
4 changed files with 30 additions and 36 deletions
  1. 8 5
      src/ssl.c
  2. 18 26
      src/wolfio.c
  3. 2 1
      wolfssl/openssl/compat_types.h
  4. 2 4
      wolfssl/wolfio.h

+ 8 - 5
src/ssl.c

@@ -54967,8 +54967,8 @@ int wolfSSL_CONF_cmd(WOLFSSL_CONF_CTX* cctx, const char* cmd, const char* value)
             else
                 port = str + XSTRLEN(str); /* point to null terminator */
 
-            bio->ip = (char*)XMALLOC(1 + port - str, bio->heap,
-                                        DYNAMIC_TYPE_OPENSSL);
+            bio->ip = (char*)XMALLOC((port - str) + 1, /* +1 for null char */
+                    bio->heap, DYNAMIC_TYPE_OPENSSL);
             XMEMCPY(bio->ip, str, port - str);
             bio->ip[port - str] = '\0';
             bio->type  = WOLFSSL_BIO_SOCKET;
@@ -55055,13 +55055,14 @@ int wolfSSL_CONF_cmd(WOLFSSL_CONF_CTX* cctx, const char* cmd, const char* value)
         return WOLFSSL_SUCCESS;
     }
 
+#ifdef HAVE_SOCKADDR
     int wolfSSL_BIO_do_accept(WOLFSSL_BIO *b)
     {
         SOCKET_T sfd = SOCKET_INVALID;
         WOLFSSL_ENTER("wolfSSL_BIO_do_accept");
 
         if (!b) {
-            WOLFSSL_ENTER("Bad parameter");
+            WOLFSSL_MSG("Bad parameter");
             return WOLFSSL_FAILURE;
         }
 
@@ -55102,13 +55103,15 @@ int wolfSSL_CONF_cmd(WOLFSSL_CONF_CTX* cctx, const char* cmd, const char* value)
             /* Push onto bio chain for user retrieval */
             if (wolfSSL_BIO_push(b, new_bio) == NULL) {
                 WOLFSSL_ENTER("wolfSSL_BIO_push error");
-                CloseSocket(newfd);
+                /* newfd is closed when bio is free'd */
+                wolfSSL_BIO_free(new_bio);
                 return WOLFSSL_FAILURE;
             }
         }
 
         return WOLFSSL_SUCCESS;
     }
+#endif /* HAVE_SOCKADDR */
 #endif /* HAVE_HTTP_CLIENT */
 
     int wolfSSL_BIO_eof(WOLFSSL_BIO* b)
@@ -55312,7 +55315,7 @@ int wolfSSL_CONF_cmd(WOLFSSL_CONF_CTX* cctx, const char* cmd, const char* value)
             #ifdef CloseSocket
                 if (bio->type == WOLFSSL_BIO_SOCKET && bio->num)
                     CloseSocket(bio->num);
-             #endif
+            #endif
             }
 
         #ifndef NO_FILESYSTEM

+ 18 - 26
src/wolfio.c

@@ -865,6 +865,7 @@ int wolfIO_TcpConnect(SOCKET_T* sockfd, const char* ip, word16 port, int to_sec)
 int wolfIO_TcpBind(SOCKET_T* sockfd, word16 port)
 {
 #ifdef HAVE_SOCKADDR
+    int ret = 0;
     SOCKADDR_S addr;
     int sockaddr_len = sizeof(SOCKADDR_IN);
     SOCKADDR_IN *sin = (SOCKADDR_IN *)&addr;
@@ -880,39 +881,34 @@ int wolfIO_TcpBind(SOCKET_T* sockfd, word16 port)
     sin->sin_port = XHTONS(port);
     *sockfd = (SOCKET_T)socket(AF_INET, SOCK_STREAM, 0);
 
+    if (*sockfd < 0) {
+        WOLFSSL_MSG("socket failed");
+        *sockfd = SOCKET_INVALID;
+        return -1;
+    }
+
 #if !defined(USE_WINDOWS_API) && !defined(WOLFSSL_MDK_ARM)\
                    && !defined(WOLFSSL_KEIL_TCP_NET) && !defined(WOLFSSL_ZEPHYR)
     {
         int optval  = 1;
-#ifndef USE_WINDOWS_API
-        socklen_t optlen = sizeof(optval);
-#else
-        int optlen = sizeof(optval);
-#endif
-        if (setsockopt(*sockfd, SOL_SOCKET, SO_REUSEADDR, &optval, optlen) < 0) {
-            WOLFSSL_MSG("setsockopt SO_REUSEADDR failed");
-            CloseSocket(*sockfd);
-            *sockfd = SOCKET_INVALID;
-            return -1;
-        }
+        XSOCKLENT optlen = sizeof(optval);
+        ret = setsockopt(*sockfd, SOL_SOCKET, SO_REUSEADDR, &optval, optlen);
     }
 #endif
 
-    if (bind(*sockfd, (SOCKADDR *)sin, sockaddr_len) != 0) {
-        WOLFSSL_MSG("tcp bind failed");
-        CloseSocket(*sockfd);
-        *sockfd = SOCKET_INVALID;
-        return -1;
-    }
+    if (ret == 0)
+        ret = bind(*sockfd, (SOCKADDR *)sin, sockaddr_len);
+    if (ret == 0)
+        ret = listen(*sockfd, SOMAXCONN);
 
-    if (listen(*sockfd, SOMAXCONN) != 0) {
-        WOLFSSL_MSG("tcp listen failed");
+    if (ret != 0) {
+        WOLFSSL_MSG("wolfIO_TcpBind failed");
         CloseSocket(*sockfd);
         *sockfd = SOCKET_INVALID;
-        return -1;
+        ret = -1;
     }
 
-    return 0;
+    return ret;
 #else
     (void)sockfd;
     (void)port;
@@ -921,11 +917,7 @@ int wolfIO_TcpBind(SOCKET_T* sockfd, word16 port)
 }
 
 #ifdef HAVE_SOCKADDR
-#ifndef USE_WINDOWS_API
-int wolfIO_TcpAccept(SOCKET_T sockfd, SOCKADDR* peer_addr, socklen_t* peer_len)
-#else
-int wolfIO_TcpAccept(SOCKET_T sockfd, SOCKADDR* peer_addr, int* peer_len)
-#endif
+int wolfIO_TcpAccept(SOCKET_T sockfd, SOCKADDR* peer_addr, XSOCKLENT* peer_len)
 {
     return accept(sockfd, peer_addr, peer_len);
 }

+ 2 - 1
wolfssl/openssl/compat_types.h

@@ -26,8 +26,9 @@
 #ifndef WOLFSSL_OPENSSL_COMPAT_TYPES_H_
 #define WOLFSSL_OPENSSL_COMPAT_TYPES_H_
 
-#include <wolfssl/wolfcrypt/hmac.h>
+#include <wolfssl/wolfcrypt/settings.h>
 #include <wolfssl/wolfcrypt/types.h>
+#include <wolfssl/wolfcrypt/hmac.h>
 
 typedef struct WOLFSSL_HMAC_CTX {
     Hmac hmac;

+ 2 - 4
wolfssl/wolfio.h

@@ -373,10 +373,8 @@
 #endif
 WOLFSSL_API  int wolfIO_TcpConnect(SOCKET_T* sockfd, const char* ip,
     unsigned short port, int to_sec);
-#ifndef USE_WINDOWS_API
-WOLFSSL_API int wolfIO_TcpAccept(SOCKET_T sockfd, SOCKADDR* peer_addr, socklen_t* peer_len);
-#else
-WOLFSSL_API int wolfIO_TcpAccept(SOCKET_T sockfd, SOCKADDR* peer_addr, int* peer_len);
+#ifdef HAVE_SOCKADDR
+WOLFSSL_API int wolfIO_TcpAccept(SOCKET_T sockfd, SOCKADDR* peer_addr, XSOCKLENT* peer_len);
 #endif
 WOLFSSL_API int wolfIO_TcpBind(SOCKET_T* sockfd, word16 port);
 WOLFSSL_API  int wolfIO_Send(SOCKET_T sd, char *buf, int sz, int wrFlags);