]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
[CLEANUP] add a few checks for functions return values
authorWilly Tarreau <w@1wt.eu>
Sun, 15 Oct 2006 12:59:03 +0000 (14:59 +0200)
committerWilly Tarreau <w@1wt.eu>
Sun, 15 Oct 2006 12:59:03 +0000 (14:59 +0200)
Markus Elfring suggested adding a few checks which were missing
after a bunch of getsockopt() and 2 strdup(). While those are
unlikely to fail where they are used, it makes the code cleaner.

src/checks.c
src/standard.c
src/stream_sock.c

index 3085eab930b3c5e966ef0362861c5265b71e9cff..9643a2b0d6f9eab8757b1187ad48540376628641 100644 (file)
@@ -176,9 +176,7 @@ int event_srv_chk_r(int fd)
        socklen_t lskerr = sizeof(skerr);
 
        result = len = -1;
-
-       getsockopt(fd, SOL_SOCKET, SO_ERROR, &skerr, &lskerr);
-       if (!skerr) {
+       if (!getsockopt(fd, SOL_SOCKET, SO_ERROR, &skerr, &lskerr) && !skerr) {
 #ifndef MSG_NOSIGNAL
                len = recv(fd, reply, sizeof(reply), 0);
 #else
index 64357a2b250be79f2eb0c90572b6698d9cc85448..a32267bb6972b0b94873fe3241e08867ea395ba4 100644 (file)
@@ -96,6 +96,8 @@ struct sockaddr_in *str2sa(char *str)
 
        memset(&sa, 0, sizeof(sa));
        str = strdup(str);
+       if (str == NULL)
+               goto out_nofree;
 
        if ((c = strrchr(str,':')) != NULL) {
                *c++ = '\0';
@@ -120,6 +122,7 @@ struct sockaddr_in *str2sa(char *str)
        sa.sin_family = AF_INET;
 
        free(str);
+ out_nofree:
        return &sa;
 }
 
@@ -137,6 +140,8 @@ int str2net(char *str, struct in_addr *addr, struct in_addr *mask)
        memset(mask, 0, sizeof(*mask));
        memset(addr, 0, sizeof(*addr));
        str = strdup(str);
+       if (str == NULL)
+               return 0;
 
        if ((c = strrchr(str, '/')) != NULL) {
                *c++ = '\0';
index f0f80d1e27a7747c67ddf1008fe7ab330a3fd946..2f91b0fbce90eb91e86f70db2461795466a9342a 100644 (file)
@@ -86,8 +86,8 @@ int stream_sock_read(int fd) {
                                int skerr;
                                socklen_t lskerr = sizeof(skerr);
        
-                               getsockopt(fd, SOL_SOCKET, SO_ERROR, &skerr, &lskerr);
-                               if (skerr)
+                               ret = getsockopt(fd, SOL_SOCKET, SO_ERROR, &skerr, &lskerr);
+                               if (ret == -1 || skerr)
                                        ret = -1;
                                else
                                        ret = recv(fd, b->r, max, 0);
@@ -171,8 +171,8 @@ int stream_sock_write(int fd) {
                        if (fdtab[fd].state == FD_STCONN) {
                                int skerr;
                                socklen_t lskerr = sizeof(skerr);
-                               getsockopt(fd, SOL_SOCKET, SO_ERROR, &skerr, &lskerr);
-                               if (skerr) {
+                               ret = getsockopt(fd, SOL_SOCKET, SO_ERROR, &skerr, &lskerr);
+                               if (ret == -1 || skerr) {
                                        b->flags |= BF_WRITE_ERROR;
                                        fdtab[fd].state = FD_STERROR;
                                        task_wakeup(&rq, fdtab[fd].owner);
@@ -195,8 +195,8 @@ int stream_sock_write(int fd) {
                        int skerr;
                        socklen_t lskerr = sizeof(skerr);
 
-                       getsockopt(fd, SOL_SOCKET, SO_ERROR, &skerr, &lskerr);
-                       if (skerr)
+                       ret = getsockopt(fd, SOL_SOCKET, SO_ERROR, &skerr, &lskerr);
+                       if (ret == -1 || skerr)
                                ret = -1;
                        else
                                ret = send(fd, b->w, max, MSG_DONTWAIT);