]> err.no Git - varnish/commitdiff
Protect all vsb's (sbufs) with an assert that they did not overflow.
authorphk <phk@d4fa192b-c00b-0410-8231-f00ffab90ce4>
Wed, 23 Jan 2008 09:46:13 +0000 (09:46 +0000)
committerphk <phk@d4fa192b-c00b-0410-8231-f00ffab90ce4>
Wed, 23 Jan 2008 09:46:13 +0000 (09:46 +0000)
I don't think it is likely that they would, but some users are running
out of memory, so make it deterministic when it happens.

Noticed by Coverity Scan (CID: 4-6)

git-svn-id: svn+ssh://projects.linpro.no/svn/varnish/trunk@2370 d4fa192b-c00b-0410-8231-f00ffab90ce4

varnish-cache/bin/varnishd/cache_cli.c
varnish-cache/bin/varnishd/cache_synthetic.c
varnish-cache/bin/varnishd/cache_vary.c
varnish-cache/bin/varnishd/mgt_cli.c
varnish-cache/bin/varnishd/mgt_vcc.c
varnish-cache/bin/varnishd/varnishd.c

index aabe8d81c26adeda2a40a52f2aad7af77ab735ce..4936798d445dfa1675837c06fce2c461053cbd7f 100644 (file)
@@ -125,6 +125,7 @@ CLI_Init(void)
                vsb_clear(cli->sb);
                cli_dispatch(cli, CLI_cmds, buf);
                vsb_finish(cli->sb);
+               AZ(vsb_overflowed(cli->sb));
                i = cli_writeres(heritage.fds[1], cli);
                if (i) {
                        VSL(SLT_Error, 0, "CLI write failed (errno=%d)", errno);
index 2a8f01ae255c5fd9a2db89be31b8b9301e738158..fe7c3540f2c097ac0ba6b4d39ca33ef8186015ed 100644 (file)
@@ -118,6 +118,7 @@ SYN_ErrorPage(struct sess *sp, int status, const char *reason)
            "  </body>\n"
            "</html>\n");
        vsb_finish(&vsb);
+       AZ(vsb_overflowed(&vsb));
        w->acct.hdrbytes = WRK_Write(w, vsb_data(&vsb), vsb_len(&vsb));
        (void)WRK_Flush(w);
        vsb_delete(&vsb);
index 3db31a267b122dfe72fb8100d0342a1113fc18d5..14eb6f0c056a7f0e2e1137769cb4b0d247e29146 100644 (file)
@@ -91,6 +91,7 @@ VRY_Create(const struct sess *sp)
                vsb_clear(sbh);
                vsb_printf(sbh, "%c%.*s:%c", 1 + (q - p), q - p, p, 0);
                vsb_finish(sbh);
+               AZ(vsb_overflowed(sbh));
 
                /* Append to vary matching string */
                vsb_bcat(sb, vsb_data(sbh), vsb_len(sbh));
@@ -122,6 +123,7 @@ VRY_Create(const struct sess *sp)
        vsb_printf(sb, "%c", 0);
 
        vsb_finish(sb);
+       AZ(vsb_overflowed(sb));
        l = vsb_len(sb);
        sp->obj->vary = malloc(l);
        AN(sp->obj->vary);
index 29e10e869a35f993aca96bd707f0b61c2971bb65..9453fcaa610316eebe7e158d8a38803f0768a930 100644 (file)
@@ -124,6 +124,7 @@ mcf_passthru(struct cli *cli, const char * const *av, void *priv)
        vsb_putc(sb, '\n');
        xxxassert(!vsb_overflowed(sb));
        vsb_finish(sb);
+       AZ(vsb_overflowed(sb));
        i = write(cli_o, vsb_data(sb), vsb_len(sb));
        xxxassert(i == vsb_len(sb));
        vsb_delete(sb);
@@ -325,6 +326,7 @@ mgt_cli_callback(const struct ev *e, int what)
                vsb_clear(cp->cli->sb);
                cli_dispatch(cp->cli, cli_proto, p);
                vsb_finish(cp->cli->sb);
+               AZ(vsb_overflowed(cp->cli->sb));
 
                /* send the result back */
                if (cli_writeres(cp->fdo, cp->cli))
index 6cbfcccd73a5d8f497f317ce0afaeccf3688f0d4..b912ffdcc286990680f22c9fc53d638b51331680 100644 (file)
@@ -237,6 +237,7 @@ mgt_run_cc(const char *source, struct vsb *sb)
        vsb_new(&cmdsb, cmdline, sizeof cmdline, 0);
        mgt_make_cc_cmd(&cmdsb, sf, of);
        vsb_finish(&cmdsb);
+       AZ(vsb_overflowed(&cmdsb));
        /* XXX check vsb state */
 
        if (pipe(p) < 0) {
@@ -430,6 +431,7 @@ mgt_vcc_default(const char *b_arg, const char *f_arg, int f_fd, int C_flag)
                vf = mgt_VccCompileFile(sb, f_arg, C_flag, f_fd);
        }
        vsb_finish(sb);
+       AZ(vsb_overflowed(sb));
        if (vsb_len(sb) > 0)
                fprintf(stderr, "%s", vsb_data(sb));
        vsb_delete(sb);
@@ -511,6 +513,7 @@ mcf_config_inline(struct cli *cli, const char * const *av, void *priv)
        XXXAN(sb);
        vf = mgt_VccCompile(sb, av[3], NULL, 0);
        vsb_finish(sb);
+       AZ(vsb_overflowed(sb));
        if (vsb_len(sb) > 0)
                cli_out(cli, "%s", vsb_data(sb));
        vsb_delete(sb);
@@ -544,6 +547,7 @@ mcf_config_load(struct cli *cli, const char * const *av, void *priv)
        XXXAN(sb);
        vf = mgt_VccCompileFile(sb, av[3], 0, -1);
        vsb_finish(sb);
+       AZ(vsb_overflowed(sb));
        if (vsb_len(sb) > 0)
                cli_out(cli, "%s", vsb_data(sb));
        vsb_delete(sb);
index 56875c2969ce2208ea431d94f3949f95a8254747..36e63c2da463f0604d47832b9e4abc2aa06ce4c8 100644 (file)
@@ -342,6 +342,7 @@ cli_check(const struct cli *cli)
                return;
        }
        vsb_finish(cli->sb);
+       AZ(vsb_overflowed(cli->sb));
        fprintf(stderr, "Error:\n%s\n", vsb_data(cli->sb));
        exit (2);
 }
@@ -477,6 +478,7 @@ main(int argc, char *argv[])
        if (cli[0].result != CLIS_OK) {
                fprintf(stderr, "Parameter errors:\n");
                vsb_finish(cli[0].sb);
+               AZ(vsb_overflowed(cli[0].sb));
                fprintf(stderr, "%s\n", vsb_data(cli[0].sb));
                exit(1);
        }