r3315 - in trunk/varnish-cache/bin: varnishd varnishtest/tests

phk at projects.linpro.no phk at projects.linpro.no
Fri Oct 17 11:03:21 CEST 2008


Author: phk
Date: 2008-10-17 11:03:21 +0200 (Fri, 17 Oct 2008)
New Revision: 3315

Added:
   trunk/varnish-cache/bin/varnishtest/tests/r00354.vtc
Modified:
   trunk/varnish-cache/bin/varnishd/cache_center.c
   trunk/varnish-cache/bin/varnishd/cache_http.c
Log:
Fix a segfault on certain garbed HTTP request headers.

Fixes:	#354



Modified: trunk/varnish-cache/bin/varnishd/cache_center.c
===================================================================
--- trunk/varnish-cache/bin/varnishd/cache_center.c	2008-10-17 07:00:02 UTC (rev 3314)
+++ trunk/varnish-cache/bin/varnishd/cache_center.c	2008-10-17 09:03:21 UTC (rev 3315)
@@ -308,6 +308,7 @@
 
 	/* We always close when we take this path */
 	sp->doclose = "error";
+	sp->wantbody = 1;
 
 	w = sp->wrk;
 	if (sp->obj == NULL) {

Modified: trunk/varnish-cache/bin/varnishd/cache_http.c
===================================================================
--- trunk/varnish-cache/bin/varnishd/cache_http.c	2008-10-17 07:00:02 UTC (rev 3314)
+++ trunk/varnish-cache/bin/varnishd/cache_http.c	2008-10-17 09:03:21 UTC (rev 3315)
@@ -496,16 +496,17 @@
 
 	i = http_splitline(sp->wrk, sp->fd, hp, htc,
 	    HTTP_HDR_REQ, HTTP_HDR_URL, HTTP_HDR_PROTO);
-	hp->protover = 0.9;
+	if (i != 0) {
+		WSPR(sp, SLT_HttpGarbage, htc->rxbuf);
+		return (i);
+	}
+
 	if (!strcmp(hp->hd[HTTP_HDR_PROTO].b, "HTTP/1.0"))
 		hp->protover = 1.0;
 	else if (!strcmp(hp->hd[HTTP_HDR_PROTO].b, "HTTP/1.1"))
 		hp->protover = 1.1;
 	else
 		hp->protover = 0.9;
-
-	if (i != 0)
-		WSPR(sp, SLT_HttpGarbage, htc->rxbuf);
 	return (i);
 }
 

Added: trunk/varnish-cache/bin/varnishtest/tests/r00354.vtc
===================================================================
--- trunk/varnish-cache/bin/varnishtest/tests/r00354.vtc	                        (rev 0)
+++ trunk/varnish-cache/bin/varnishtest/tests/r00354.vtc	2008-10-17 09:03:21 UTC (rev 3315)
@@ -0,0 +1,16 @@
+# $Id$
+
+test "#354 Segfault in strcmp in http_DissectRequest()"
+
+server s1 {
+	rxreq
+	txresp
+}
+
+varnish v1 -vcl+backend {} -start
+
+client c1 {
+	send "FOO\r\n\r\n"
+	rxresp
+	expect resp.status == 400
+} -run




More information about the varnish-commit mailing list