[2.1] varnish-2.1.5-10-gfbee94e
Tollef Fog Heen
tfheen at varnish-cache.org
Wed Apr 13 13:16:19 CEST 2011
commit fbee94e1dd2edbefdfbed58a0f9d56c41a6c08fc
Author: Tollef Fog Heen <tfheen at varnish-software.com>
Date: Wed Apr 13 13:07:38 2011 +0200
Fix memory leak on repeated headers
If there was more than one of the User-Agent, Referer, Authorization,
X-Forwarded-For or Host header in a request, varnishncsa would leak
some memory. We now just use the last value.
diff --git a/bin/varnishncsa/varnishncsa.c b/bin/varnishncsa/varnishncsa.c
index 566a269..dd9f43a 100644
--- a/bin/varnishncsa/varnishncsa.c
+++ b/bin/varnishncsa/varnishncsa.c
@@ -366,17 +366,23 @@ collect_client(struct logline *lp, enum shmlogtag tag, unsigned spec,
case SLT_RxHeader:
if(!lp->active)
break;
- if (isprefix(ptr, "user-agent:", end, &next))
+ if (isprefix(ptr, "user-agent:", end, &next)) {
+ free(lp->df_User_agent);
lp->df_User_agent = trimline(next, end);
- else if (isprefix(ptr, "referer:", end, &next))
+ } else if (isprefix(ptr, "referer:", end, &next)) {
+ free(lp->df_Referer);
lp->df_Referer = trimline(next, end);
- else if (isprefix(ptr, "authorization:", end, &next) &&
- isprefix(next, "basic", end, &next))
+ } else if (isprefix(ptr, "authorization:", end, &next) &&
+ isprefix(next, "basic", end, &next)) {
+ free(lp->df_u);
lp->df_u = trimline(next, end);
- else if (isprefix(ptr, "x-forwarded-for:", end, &next))
+ } else if (isprefix(ptr, "x-forwarded-for:", end, &next)) {
+ free(lp->df_X_Forwarded_For);
lp->df_X_Forwarded_For = trimline(next, end);
- else if (isprefix(ptr, "host:", end, &next))
+ } else if (isprefix(ptr, "host:", end, &next)) {
+ free(lp->df_Host);
lp->df_Host = trimline(next, end);
+ }
break;
case SLT_Length:
More information about the varnish-commit
mailing list