Skip to content
This repository has been archived by the owner on Jul 30, 2021. It is now read-only.

Commit

Permalink
Fix memory leak on repeated headers
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
Tollef Fog Heen committed Apr 13, 2011
1 parent aed56fa commit fbee94e
Showing 1 changed file with 12 additions and 6 deletions.
18 changes: 12 additions & 6 deletions bin/varnishncsa/varnishncsa.c
Expand Up @@ -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:
Expand Down

0 comments on commit fbee94e

Please sign in to comment.