[master] aa10339 Fix memory leak on repeated headers
Tollef Fog Heen
tfheen at varnish-cache.org
Wed Apr 13 13:08:51 CEST 2011
commit aa1033975112a7a58d4d37cef646dc1cd51b7f95
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 9a95ab5..717e9e6 100644
--- a/bin/varnishncsa/varnishncsa.c
+++ b/bin/varnishncsa/varnishncsa.c
@@ -416,17 +416,23 @@ collect_client(struct logline *lp, enum vsl_tag 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_VCL_call:
More information about the varnish-commit
mailing list