Commit 131dc8c5 authored by Artur Bergman's avatar Artur Bergman

fix for #498 -- if a return header overran the obj_workspace (but was small...

fix for #498 -- if a return header overran the obj_workspace (but was small enough to fit in sess_workspace) the header is dropped and an empty slot is put in there -- rest of the code now detects this empty slot. It should probably ask VLC what to do if a header is dropped

git-svn-id: http://www.varnish-cache.org/svn/trunk/varnish-cache@4038 d4fa192b-c00b-0410-8231-f00ffab90ce4
parent 4a0862a0
...@@ -151,6 +151,11 @@ http_findhdr(const struct http *hp, unsigned l, const char *hdr) ...@@ -151,6 +151,11 @@ http_findhdr(const struct http *hp, unsigned l, const char *hdr)
unsigned u; unsigned u;
for (u = HTTP_HDR_FIRST; u < hp->nhd; u++) { for (u = HTTP_HDR_FIRST; u < hp->nhd; u++) {
/* XXX We have to check for empty header entries
because a header could have been lost in
http_copyHome */
if (hp->hd[u].b == NULL)
continue;
Tcheck(hp->hd[u]); Tcheck(hp->hd[u]);
if (hp->hd[u].e < hp->hd[u].b + l + 1) if (hp->hd[u].e < hp->hd[u].b + l + 1)
continue; continue;
...@@ -631,6 +636,8 @@ http_FilterFields(struct worker *w, int fd, struct http *to, ...@@ -631,6 +636,8 @@ http_FilterFields(struct worker *w, int fd, struct http *to,
to->nhd = HTTP_HDR_FIRST; to->nhd = HTTP_HDR_FIRST;
to->status = fm->status; to->status = fm->status;
for (u = HTTP_HDR_FIRST; u < fm->nhd; u++) { for (u = HTTP_HDR_FIRST; u < fm->nhd; u++) {
if (fm->hd[u].b == NULL)
continue;
if (fm->hdf[u] & HDF_FILTER) if (fm->hdf[u] & HDF_FILTER)
continue; continue;
#define HTTPH(a, b, c, d, e, f, g) \ #define HTTPH(a, b, c, d, e, f, g) \
...@@ -686,6 +693,8 @@ http_CopyHome(struct worker *w, int fd, struct http *hp) ...@@ -686,6 +693,8 @@ http_CopyHome(struct worker *w, int fd, struct http *hp)
hp->hd[u].b = p; hp->hd[u].b = p;
hp->hd[u].e = p + l; hp->hd[u].e = p + l;
} else { } else {
/* XXX This leaves a slot empty */
VSL_stats->losthdr++;
WSLR(w, SLT_LostHeader, fd, hp->hd[u]); WSLR(w, SLT_LostHeader, fd, hp->hd[u]);
hp->hd[u].b = NULL; hp->hd[u].b = NULL;
hp->hd[u].e = NULL; hp->hd[u].e = NULL;
...@@ -804,6 +813,8 @@ http_Unset(struct http *hp, const char *hdr) ...@@ -804,6 +813,8 @@ http_Unset(struct http *hp, const char *hdr)
unsigned u, v; unsigned u, v;
for (v = u = HTTP_HDR_FIRST; u < hp->nhd; u++) { for (v = u = HTTP_HDR_FIRST; u < hp->nhd; u++) {
if (hp->hd[u].b == NULL)
continue;
if (http_IsHdr(&hp->hd[u], hdr)) if (http_IsHdr(&hp->hd[u], hdr))
continue; continue;
if (v != u) { if (v != u) {
...@@ -840,6 +851,8 @@ http_Write(struct worker *w, const struct http *hp, int resp) ...@@ -840,6 +851,8 @@ http_Write(struct worker *w, const struct http *hp, int resp)
WSLH(w, *w->wfd, hp, HTTP_HDR_PROTO); WSLH(w, *w->wfd, hp, HTTP_HDR_PROTO);
} }
for (u = HTTP_HDR_FIRST; u < hp->nhd; u++) { for (u = HTTP_HDR_FIRST; u < hp->nhd; u++) {
if (hp->hd[u].b == NULL)
continue;
AN(hp->hd[u].b); AN(hp->hd[u].b);
AN(hp->hd[u].e); AN(hp->hd[u].e);
l += WRW_WriteH(w, &hp->hd[u], "\r\n"); l += WRW_WriteH(w, &hp->hd[u], "\r\n");
......
# $Id: r00445.vtc 3987 2009-03-23 11:54:19Z sky $
test "very very very long return header"
server s1 {
rxreq
expect req.url == "/"
txresp -hdr "Location: 111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111" -body {foo}
} -start
varnish v1 -vcl+backend {
} -start
client c1 {
txreq
rxresp
expect resp.bodylen == 3
} -run
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment