]> err.no Git - varnish/commitdiff
Fix three memory leaks related to vsb's not being vsb_deleted:
authorphk <phk@d4fa192b-c00b-0410-8231-f00ffab90ce4>
Mon, 31 Mar 2008 11:47:15 +0000 (11:47 +0000)
committerphk <phk@d4fa192b-c00b-0410-8231-f00ffab90ce4>
Mon, 31 Mar 2008 11:47:15 +0000 (11:47 +0000)
Two really bad ones in Vary processing, found by Arjan (noosius).

One isignificant one related to -b arguments being wrong,
found by FlexeLint after I taught it how to spot this kind of issue.

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

varnish-cache/bin/varnishd/cache_vary.c
varnish-cache/bin/varnishd/mgt_vcc.c

index 94eea72176a2c1d0e2c0fbd1bd40f315cc8f9fee..2ad327421d76b78baa5bd0ea7290400efc16ebdf 100644 (file)
@@ -69,6 +69,10 @@ VRY_Create(const struct sess *sp)
        struct vsb *sb, *sbh;
        unsigned l;
 
+       /* No Vary: header, no worries */
+       if (!http_GetHdr(sp->obj->http, H_Vary, &v))
+               return;
+
        /* For vary matching string */
        sb = vsb_new(NULL, NULL, 0, VSB_AUTOEXTEND);
        AN(sb);
@@ -77,10 +81,6 @@ VRY_Create(const struct sess *sp)
        sbh = vsb_new(NULL, NULL, 0, VSB_AUTOEXTEND);
        AN(sbh);
 
-       /* No Vary: header, no worries */
-       if (!http_GetHdr(sp->obj->http, H_Vary, &v))
-               return;
-
        for (p = v; *p; p++) {
 
                /* Find next header-name */
@@ -130,6 +130,9 @@ VRY_Create(const struct sess *sp)
        sp->obj->vary = malloc(l);
        AN(sp->obj->vary);
        memcpy(sp->obj->vary, vsb_data(sb), l);
+
+       vsb_delete(sb);
+       vsb_delete(sbh);
 }
 
 int
index e912fecc491caf3bc10468a594f4cfee03f4e6a0..d513d75793451a510e74f6d24e9453385bd396da 100644 (file)
@@ -423,6 +423,7 @@ mgt_vcc_default(const char *b_arg, const char *f_arg, int f_fd, int C_flag)
                         */
                        free(port);
                        fprintf(stderr, "invalid backend address\n");
+                       vsb_delete(sb);
                        return (1);
                }