r2273 - trunk/varnish-cache/bin/varnishd

phk at projects.linpro.no phk at projects.linpro.no
Tue Nov 20 17:30:24 CET 2007


Author: phk
Date: 2007-11-20 17:30:23 +0100 (Tue, 20 Nov 2007)
New Revision: 2273

Modified:
   trunk/varnish-cache/bin/varnishd/cache_vrt_esi.c
Log:
Make the incmt and remflg persistent across the parse chunks


Modified: trunk/varnish-cache/bin/varnishd/cache_vrt_esi.c
===================================================================
--- trunk/varnish-cache/bin/varnishd/cache_vrt_esi.c	2007-11-20 14:58:51 UTC (rev 2272)
+++ trunk/varnish-cache/bin/varnishd/cache_vrt_esi.c	2007-11-20 16:30:23 UTC (rev 2273)
@@ -77,6 +77,8 @@
 	struct esi_bit		*ebl;	/* list of */
 	int			neb;
 	int			is_esi;
+	int			remflg;	/* inside <esi:remove> </esi:remove> */
+	int			incmt;	/* inside <!--esi ... --> comment */
 };
 
 /*--------------------------------------------------------------------
@@ -343,29 +345,25 @@
 	char *p, *q, *r;
 	txt t, o;
 	int celem;		/* closing element */
-	int remflg;		/* inside <esi:remove> </esi:remove> */
-	int incmt;		/* inside <!--esi ... --> 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 <!--esi comment and need to zap
 			 * the end comment marker --> 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 @@
 		if (i < 2)
 			return (p - t.b);
 
-		if (remflg == 0 && !memcmp(p, "<!--esi", i > 7 ? 7 : i)) {
+		if (ew->remflg == 0 && !memcmp(p, "<!--esi", i > 7 ? 7 : i)) {
 			/*
 			 * ESI comment. <!--esi...-->
 			 * 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 @@
 
 			p += 7;
 			o.b = p;
-			incmt = 1;
+			ew->incmt = 1;
 			continue;
 		}
 
@@ -461,15 +459,15 @@
 
 			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 @@
 				/* 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
 			 */




More information about the varnish-commit mailing list