From cb9fd96ae31be414d083ae49121ecad926c9e028 Mon Sep 17 00:00:00 2001 From: phk Date: Sun, 15 Jun 2008 13:36:50 +0000 Subject: [PATCH] FlexeLint varnishtest git-svn-id: svn+ssh://projects.linpro.no/svn/varnish/trunk@2682 d4fa192b-c00b-0410-8231-f00ffab90ce4 --- varnish-cache/bin/varnishtest/flint.lnt | 78 ++++++++++++++++++++++ varnish-cache/bin/varnishtest/flint.sh | 31 +++++++++ varnish-cache/bin/varnishtest/vtc.c | 22 ++++-- varnish-cache/bin/varnishtest/vtc_client.c | 5 +- varnish-cache/bin/varnishtest/vtc_http.c | 2 + varnish-cache/bin/varnishtest/vtc_server.c | 3 +- 6 files changed, 131 insertions(+), 10 deletions(-) create mode 100644 varnish-cache/bin/varnishtest/flint.lnt create mode 100755 varnish-cache/bin/varnishtest/flint.sh diff --git a/varnish-cache/bin/varnishtest/flint.lnt b/varnish-cache/bin/varnishtest/flint.lnt new file mode 100644 index 00000000..cbc66ac7 --- /dev/null +++ b/varnish-cache/bin/varnishtest/flint.lnt @@ -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 index 00000000..bc54f11d --- /dev/null +++ b/varnish-cache/bin/varnishtest/flint.sh @@ -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 diff --git a/varnish-cache/bin/varnishtest/vtc.c b/varnish-cache/bin/varnishtest/vtc.c index 702d2f0a..593614e3 100644 --- a/varnish-cache/bin/varnishtest/vtc.c +++ b/varnish-cache/bin/varnishtest/vtc.c @@ -30,11 +30,12 @@ #include #include #include -#include #include #include #include +#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)) diff --git a/varnish-cache/bin/varnishtest/vtc_client.c b/varnish-cache/bin/varnishtest/vtc_client.c index a275b9e8..d29c1e06 100644 --- a/varnish-cache/bin/varnishtest/vtc_client.c +++ b/varnish-cache/bin/varnishtest/vtc_client.c @@ -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); diff --git a/varnish-cache/bin/varnishtest/vtc_http.c b/varnish-cache/bin/varnishtest/vtc_http.c index b233bd36..a1f4b4ca 100644 --- a/varnish-cache/bin/varnishtest/vtc_http.c +++ b/varnish-cache/bin/varnishtest/vtc_http.c @@ -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); } diff --git a/varnish-cache/bin/varnishtest/vtc_server.c b/varnish-cache/bin/varnishtest/vtc_server.c index c146e26b..9b99f595 100644 --- a/varnish-cache/bin/varnishtest/vtc_server.c +++ b/varnish-cache/bin/varnishtest/vtc_server.c @@ -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; -- 2.39.5