From 39650576f0edd7159899e93a8d47f4f5a803ba55 Mon Sep 17 00:00:00 2001 From: phk Date: Tue, 20 Nov 2007 16:30:23 +0000 Subject: [PATCH] Make the incmt and remflg persistent across the parse chunks git-svn-id: svn+ssh://projects.linpro.no/svn/varnish/trunk@2273 d4fa192b-c00b-0410-8231-f00ffab90ce4 --- varnish-cache/bin/varnishd/cache_vrt_esi.c | 32 ++++++++++------------ 1 file changed, 15 insertions(+), 17 deletions(-) diff --git a/varnish-cache/bin/varnishd/cache_vrt_esi.c b/varnish-cache/bin/varnishd/cache_vrt_esi.c index 03b6e8c9..d1c5a13e 100644 --- a/varnish-cache/bin/varnishd/cache_vrt_esi.c +++ b/varnish-cache/bin/varnishd/cache_vrt_esi.c @@ -77,6 +77,8 @@ struct esi_work { struct esi_bit *ebl; /* list of */ int neb; int is_esi; + int remflg; /* inside */ + int incmt; /* inside comment */ }; /*-------------------------------------------------------------------- @@ -343,29 +345,25 @@ esi_parse(struct esi_work *ew) char *p, *q, *r; txt t, o; int celem; /* closing element */ - int remflg; /* inside */ - int incmt; /* inside comment */ int i; t.b = (char *)ew->st->ptr; t.e = t.b + ew->st->len; ew->dst.b = t.b; ew->dst.e = t.b; - remflg = 0; - incmt = 0; o.b = t.b; for (p = t.b; p < t.e; ) { - if (incmt && *p == '-') { + if (ew->incmt && *p == '-') { /* * We are inside an when we see it. */ if (p + 2 >= t.e) { - /* XXX: need to return pending incmt */ + /* XXX: need to return pending ew->incmt */ return (p - t.b); } if (!memcmp(p, "-->", 3)) { - incmt = 0; + ew->incmt = 0; o.e = p; esi_addverbatim(ew, o); p += 3; @@ -386,12 +384,12 @@ esi_parse(struct esi_work *ew) if (i < 2) return (p - t.b); - if (remflg == 0 && !memcmp(p, " * at least 10 char, but we only test on the * first seven because the tail is handled - * by the incmt flag. + * by the ew->incmt flag. */ ew->is_esi++; if (i < 7) @@ -402,7 +400,7 @@ esi_parse(struct esi_work *ew) p += 7; o.b = p; - incmt = 1; + ew->incmt = 1; continue; } @@ -461,15 +459,15 @@ esi_parse(struct esi_work *ew) ew->is_esi++; - if (celem != remflg) { + if (celem != ew->remflg) { /* * ESI 1.0 violation, ignore element */ - esi_error(ew, p, 1 + q - p, - remflg ? "ESI 1.0 forbids nested esi:remove" + esi_error(ew, p, 1 + q - p, ew->remflg ? + "ESI 1.0 forbids nested esi:remove" : "ESI 1.0 esi:remove not opened"); - if (!remflg) { + if (!ew->remflg) { o.e = p; esi_addverbatim(ew, o); } @@ -481,17 +479,17 @@ esi_parse(struct esi_work *ew) /* open element */ o.e = p; esi_addverbatim(ew, o); - remflg = !celem; + ew->remflg = !celem; } else { /* close element */ - remflg = !celem; + ew->remflg = !celem; } p = q + 1; o.b = p; continue; } - if (remflg && r + 3 < q && !memcmp(r, "esi:", 4)) { + if (ew->remflg && r + 3 < q && !memcmp(r, "esi:", 4)) { /* * ESI 1.0 violation, no esi: elements in esi:remove */ -- 2.39.5