Mailing List Archive

r1700 - trunk/varnish-cache/lib/libvcl
Author: phk
Date: 2007-07-15 12:22:39 +0200 (Sun, 15 Jul 2007)
New Revision: 1700

Modified:
trunk/varnish-cache/lib/libvcl/vcc_compile.c
trunk/varnish-cache/lib/libvcl/vcc_compile.h
trunk/varnish-cache/lib/libvcl/vcc_var.c
Log:
Plug a memory-leak in the VCL compiler.


Modified: trunk/varnish-cache/lib/libvcl/vcc_compile.c
===================================================================
--- trunk/varnish-cache/lib/libvcl/vcc_compile.c 2007-07-15 10:22:05 UTC (rev 1699)
+++ trunk/varnish-cache/lib/libvcl/vcc_compile.c 2007-07-15 10:22:39 UTC (rev 1700)
@@ -95,18 +95,26 @@

/*--------------------------------------------------------------------*/

+void
+TlFree(struct tokenlist *tl, void *p)
+{
+ struct membit *mb;
+
+ 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)
{
- 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);
+ TlFree(tl, p);
return (p);
}


Modified: trunk/varnish-cache/lib/libvcl/vcc_compile.h
===================================================================
--- trunk/varnish-cache/lib/libvcl/vcc_compile.h 2007-07-15 10:22:05 UTC (rev 1699)
+++ trunk/varnish-cache/lib/libvcl/vcc_compile.h 2007-07-15 10:22:39 UTC (rev 1700)
@@ -153,6 +153,7 @@
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 */

Modified: trunk/varnish-cache/lib/libvcl/vcc_var.c
===================================================================
--- trunk/varnish-cache/lib/libvcl/vcc_var.c 2007-07-15 10:22:05 UTC (rev 1699)
+++ trunk/varnish-cache/lib/libvcl/vcc_var.c 2007-07-15 10:22:39 UTC (rev 1700)
@@ -64,10 +64,12 @@
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);
}