]> err.no Git - varnish/commitdiff
Plug a memory-leak in the VCL compiler.
authorphk <phk@d4fa192b-c00b-0410-8231-f00ffab90ce4>
Sun, 15 Jul 2007 10:22:39 +0000 (10:22 +0000)
committerphk <phk@d4fa192b-c00b-0410-8231-f00ffab90ce4>
Sun, 15 Jul 2007 10:22:39 +0000 (10:22 +0000)
git-svn-id: svn+ssh://projects.linpro.no/svn/varnish/trunk@1700 d4fa192b-c00b-0410-8231-f00ffab90ce4

varnish-cache/lib/libvcl/vcc_compile.c
varnish-cache/lib/libvcl/vcc_compile.h
varnish-cache/lib/libvcl/vcc_var.c

index f675afe2375cf0f545d40d66e9b3867408872ddb..07eca8e2b13b8e0c8c80af9ff0bfb1b082dcb694 100644 (file)
@@ -95,18 +95,26 @@ static const char *vcc_default_vcl_b, *vcc_default_vcl_e;
 
 /*--------------------------------------------------------------------*/
 
-void *
-TlAlloc(struct tokenlist *tl, unsigned len)
+void
+TlFree(struct tokenlist *tl, void *p)
 {
        struct membit *mb;
-       void *p;
 
-       p = calloc(len, 1);
-       assert(p != NULL);
        mb = calloc(sizeof *mb, 1);
        assert(mb != NULL);
        mb->ptr = p;
        TAILQ_INSERT_TAIL(&tl->membits, mb, list);
+}
+
+
+void *
+TlAlloc(struct tokenlist *tl, unsigned len)
+{
+       void *p;
+
+       p = calloc(len, 1);
+       assert(p != NULL);
+       TlFree(tl, p);
        return (p);
 }
 
index dd0da2758ed768add8d0c4472f2a2c4352367b12..df4441e898a3480172e19a91b7a55c2028a91507 100644 (file)
@@ -153,6 +153,7 @@ void Fi(const struct tokenlist *tl, int indent, const char *fmt, ...);
 void Ff(const struct tokenlist *tl, int indent, const char *fmt, ...);
 void EncToken(struct vsb *sb, const struct token *t);
 int IsMethod(const struct token *t);
+void TlFree(struct tokenlist *tl, void *p);
 void *TlAlloc(struct tokenlist *tl, unsigned len);
 
 /* vcc_obj.c */
index 33cf04e8573e6fb706d6aaf2997629dc7690aacf..110f0898f3f077b25fac671695e5ccdd9665c6a3 100644 (file)
@@ -64,10 +64,12 @@ HeaderVar(struct tokenlist *tl, const struct token *t, const struct var *vh)
        asprintf(&p, "VRT_GetHdr(sp, %s, \"\\%03o%s:\")", v->hdr,
            (unsigned)(strlen(v->name + vh->len) + 1), v->name + vh->len);
        AN(p);
+       TlFree(tl, p);
        v->rname = p;
        asprintf(&p, "VRT_SetHdr(sp, %s, \"\\%03o%s:\", ", v->hdr,
            (unsigned)(strlen(v->name + vh->len) + 1), v->name + vh->len);
        AN(p);
+       TlFree(tl, p);
        v->lname = p;
        return (v);
 }