]> err.no Git - varnish/commitdiff
FlexeLint varnishtest
authorphk <phk@d4fa192b-c00b-0410-8231-f00ffab90ce4>
Sun, 15 Jun 2008 13:36:50 +0000 (13:36 +0000)
committerphk <phk@d4fa192b-c00b-0410-8231-f00ffab90ce4>
Sun, 15 Jun 2008 13:36:50 +0000 (13:36 +0000)
git-svn-id: svn+ssh://projects.linpro.no/svn/varnish/trunk@2682 d4fa192b-c00b-0410-8231-f00ffab90ce4

varnish-cache/bin/varnishtest/flint.lnt [new file with mode: 0644]
varnish-cache/bin/varnishtest/flint.sh [new file with mode: 0755]
varnish-cache/bin/varnishtest/vtc.c
varnish-cache/bin/varnishtest/vtc_client.c
varnish-cache/bin/varnishtest/vtc_http.c
varnish-cache/bin/varnishtest/vtc_server.c

diff --git a/varnish-cache/bin/varnishtest/flint.lnt b/varnish-cache/bin/varnishtest/flint.lnt
new file mode 100644 (file)
index 0000000..cbc66ac
--- /dev/null
@@ -0,0 +1,78 @@
+-passes=3
+
++libh mgt_event.h
++libh ../../config.h
+
+-emacro((???),va_arg)   // the va_arg() macro can yield 415, 416, 661, 662
+                        // 796 and 797 (out-of-bounds errors).
+-elib(123)  // size is both a variable and a macro with args
+-emacro(736, isnan)  // isnanf
+
+
+-sem(strchr, 1p, type(1), 2n == 0 ? (@p < 1p) : (@p < 1p || @p == 0 ))
+
+-sem(vsb_new, @p == malloc(1))
+-sem(vsb_delete, custodial(1))
+-sem(lbv_assert, r_no)
+-sem(lbv_xxxassert, r_no)
+
+-ffc   // No automatic custody
+
+-e763  // Redundant declaration for symbol '...' previously declared
+-e726  // Extraneous comma ignored
+-e728  // Symbol ... not explicitly initialized
+-e716  // while(1) ... 
+-e785  // Too few initializers for aggregate 
+-e786  // String concatenation within initializer
+
+-emacro(740, VTAILQ_PREV) // Unusual pointer cast (incompatible indirect types)
+-emacro(740, VTAILQ_LAST) // Unusual pointer cast (incompatible indirect types)
+-emacro((826), VTAILQ_PREV) // Suspicious pointer-to-pointer conversion (area too small)
+-emacro((826), VTAILQ_LAST) // Suspicious pointer-to-pointer conversion (area too small)
+-emacro(506, VTAILQ_FOREACH_SAFE) // constant value boolean
+
+-esym(534, sprintf)    // Ignoring return value of function
+-esym(534, asprintf)   // Ignoring return value of function
+-esym(534, printf)     // Ignoring return value of function
+-esym(534, fprintf)    // Ignoring return value of function
+-esym(534, memset)     // Ignoring return value of function
+-esym(534, memcpy)     // Ignoring return value of function
+-esym(534, memmove)    // Ignoring return value of function
+-esym(534, strcpy)     // Ignoring return value of function
+-esym(534, vsb_printf) // Ignoring return value of function
+-esym(534, vsb_cat)    // Ignoring return value of function
+-esym(534, vsb_bcat)   // Ignoring return value of function
+-esym(534, vsb_putc)   // Ignoring return value of function
+-esym(534, strcat)     // Ignoring return value of function
+-esym(534, strcpy)     // Ignoring return value of function
+-esym(534, strlcpy)    // Ignoring return value of function
+
+-emacro(506, isnan)    // constant value boolean
+-emacro(747, isnan)    // significant coersion
+-emacro(506, assert)   // constant value boolean
+-emacro(827, assert)   // loop not reachable
+-emacro(774, assert)   // booelan always true
+
+// cache.h
+-emacro(506, INCOMPL) // Constant value Boolean
+
+// Review all below this line ///////////////////////////////////////////////
+
+-e732   // Loss of sign (arg. no. 2) (int to unsigned
+-e737  // [45]  Loss of sign in promotion from int to unsigned
+-e713  // Loss of precision (assignment) (unsigned long long to long long)
+-e574  // Signed-unsigned mix with relational
+-e712  // Loss of precision (assignment) (long long to
+-e747  // Significant prototype coercion (arg. no. 2) long
+
+/*
+
+-e767  // Macro redef (system queue.h vs ours )
+
+-e506  // Constant value boolean
+-e818  // Pointer parameter '...' could be declared as pointing to const
+-e774  // Boolean within 'if' always evaluates to False
+-e534  // Ignoring return value of function
+-e557  // unrecog format
+
+*/
diff --git a/varnish-cache/bin/varnishtest/flint.sh b/varnish-cache/bin/varnishtest/flint.sh
new file mode 100755 (executable)
index 0000000..bc54f11
--- /dev/null
@@ -0,0 +1,31 @@
+#!/bin/sh
+
+T=/tmp/_$$
+flexelint \
+       -I/usr/include \
+       -I. \
+       -I../../include \
+       -I../.. \
+       -DVARNISH_STATE_DIR=\"foo\" \
+       flint.lnt \
+       *.c > $T 2>&1
+
+for t in Error Warning Info
+do
+       sed -n "/$t [0-9][0-9][0-9]:/s/.*\($t [0-9][0-9][0-9]\).*/\1/p" $T
+done | awk '
+$2 == 830      { next }
+$2 == 831      { next }
+       {
+       i=$2"_"$1
+       h[i]++
+       n++
+       }
+END    {
+       printf "%5d %s\n", n, "Total"
+       for (i in h)
+               printf "%5d %s\n", h[i], i
+       }
+' | sort -rn
+
+cat $T
index 702d2f0a417ccd077c7ddd4e745e472df63ae917..593614e3e393647cf316e650a8ba98a7b482cabb 100644 (file)
 #include <string.h>
 #include <ctype.h>
 #include <fcntl.h>
-#include <assert.h>
 #include <stdlib.h>
 #include <unistd.h>
 #include <err.h>
 
+#include "libvarnish.h"
+
 #include "vtc.h"
 
 #define                MAX_FILESIZE            (1024 * 1024)
@@ -61,7 +62,7 @@ read_file(const char *fn)
        if (s <= 0) 
                err(1, "Cannot read %s", fn);
        assert(s < sz);         /* XXX: increase MAX_FILESIZE */
-       close (fd);
+       AZ(close (fd));
        buf[s] = '\0';
        buf = realloc(buf, s + 1);
        assert(buf != NULL);
@@ -100,11 +101,16 @@ parse_string(char *buf, const struct cmds *cmd, void *priv)
                        assert(tn < MAX_TOKENS);
                        if (*p == '\n') { /* End on NL */
                                break;
-                       } else if (isspace(*p)) { /* Inter-token whitespace */
+                       }
+                       if (isspace(*p)) { /* Inter-token whitespace */
                                p++;
-                       } else if (*p == '\\' && p[1] == '\n') {
+                               continue;
+                       }
+                       if (*p == '\\' && p[1] == '\n') { /* line-cont */
                                p += 2;
-                       } else if (*p == '"') { /* quotes */
+                               continue;
+                       }
+                       if (*p == '"') { /* quotes */
                                token_s[tn] = ++p;
                                q = p;
                                for (; *p != '\0'; p++) {
@@ -149,8 +155,10 @@ parse_string(char *buf, const struct cmds *cmd, void *priv)
                }
                assert(tn < MAX_TOKENS);
                token_s[tn] = NULL;
-               for (tn = 0; token_s[tn] != NULL; tn++)
-                       *token_e[tn] = '\0';
+               for (tn = 0; token_s[tn] != NULL; tn++) {
+                       AN(token_e[tn]);        /*lint !e771 */
+                       *token_e[tn] = '\0';    /*lint !e771 */
+               }
 
                for (cp = cmd; cp->name != NULL; cp++)
                        if (!strcmp(token_s[0], cp->name))
index a275b9e8beba05729d39496596cae031bd275d15..d29c1e0607f1d3f91921c1af06fed09740b1c118 100644 (file)
@@ -71,7 +71,7 @@ client_thread(void *priv)
 {
        struct client *c;
        int i;
-       int fd;
+       int fd = -1;
 
        CAST_OBJ_NOTNULL(c, priv, CLIENT_MAGIC);
        assert(c->naddr > 0);
@@ -87,7 +87,7 @@ client_thread(void *priv)
        printf("#### Client %s connected to %s fd is %d\n",
            c->name, c->connect, fd);
        http_process(c->spec, fd, 1);
-       close(fd);
+       AZ(close(fd));
        printf("### Client %s ending\n", c->name);
 
        return (NULL);
@@ -103,6 +103,7 @@ client_new(char *name)
        struct client *c;
 
        ALLOC_OBJ(c, CLIENT_MAGIC);
+       AN(c);
        c->name = name;
        c->connect = ":8080";
        VTAILQ_INSERT_TAIL(&clients, c, list);
index b233bd3673350281d47955aa33731ff7d8ae8a87..a1f4b4ca893290c0aae671e83c544579151333fb 100644 (file)
@@ -308,6 +308,7 @@ http_process(const char *spec, int sock, int client)
        char *s, *q;
 
        ALLOC_OBJ(hp, HTTP_MAGIC);
+       AN(hp);
        hp->fd = sock;
        hp->client = client;
        hp->timeout = 1000;
@@ -321,4 +322,5 @@ http_process(const char *spec, int sock, int client)
        *q = '\0';
        AN(s);
        parse_string(s, http_cmds, hp);
+       free(hp);
 }
index c146e26b40a5c321de2d21a078306b731ddc67a8..9b99f59546ea39b78ba5ca24786bb0e0bd761398 100644 (file)
@@ -91,7 +91,7 @@ server_thread(void *priv)
                fd = accept(s->sock, addr, &l);
                printf("#### Accepted socket %d\n", fd);
                http_process(s->spec, fd, 0);
-               close(fd);
+               AZ(close(fd));
        }
        printf("### Server %s ending\n", s->name);
 
@@ -108,6 +108,7 @@ server_new(char *name)
        struct server *s;
 
        ALLOC_OBJ(s, SERVER_MAGIC);
+       AN(s);
        s->name = name;
        s->listen = ":9080";
        s->repeat = 1;