Commit 5c86918c authored by Poul-Henning Kamp's avatar Poul-Henning Kamp

FlexeLint varnishtest



git-svn-id: http://www.varnish-cache.org/svn/trunk/varnish-cache@2682 d4fa192b-c00b-0410-8231-f00ffab90ce4
parent 1a5da559
-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
*/
#!/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
......@@ -30,11 +30,12 @@
#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))
......
......@@ -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);
......
......@@ -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);
}
......@@ -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;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment