[3.0] e7b91c0 Verify range of port numbers before using them

Tollef Fog Heen tfheen at varnish-cache.org
Thu May 24 14:47:45 CEST 2012


commit e7b91c0ad49132cffd449f7926027ee2c1e5524e
Author: Kristian Lyngstol <kristian at bohemians.org>
Date:   Wed May 9 14:59:23 2012 +0200

    Verify range of port numbers before using them
    
    Fixes #1035

diff --git a/bin/varnishtest/tests/r01035.vtc b/bin/varnishtest/tests/r01035.vtc
new file mode 100644
index 0000000..ccd6078
--- /dev/null
+++ b/bin/varnishtest/tests/r01035.vtc
@@ -0,0 +1,8 @@
+varnishtest "Test case for #1035"
+
+varnish v1 -arg "-a 127.0.0.1:80 -b localhost:8080"
+varnish v1 -cliok "param.set listen_address 127.0.0.1:80"
+varnish v1 -clierr 106 "param.set listen_address 127.0.0.1:65540"
+varnish v1 -clierr 106 "param.set listen_address 127.0.0.1:65536"
+varnish v1 -clierr 106 "param.set listen_address 127.0.0.1:-1"
+varnish v1 -cliok "param.set listen_address 127.0.0.1:65535"
diff --git a/lib/libvarnish/vss.c b/lib/libvarnish/vss.c
index 42b4db7..f902023 100644
--- a/lib/libvarnish/vss.c
+++ b/lib/libvarnish/vss.c
@@ -134,6 +134,7 @@ VSS_resolve(const char *addr, const char *port, struct vss_addr ***vap)
 	struct addrinfo hints, *res0, *res;
 	struct vss_addr **va;
 	int i, ret;
+	long int ptst;
 	char *adp, *hop;
 
 	*vap = NULL;
@@ -147,8 +148,12 @@ VSS_resolve(const char *addr, const char *port, struct vss_addr ***vap)
 
 	if (adp == NULL)
 		ret = getaddrinfo(addr, port, &hints, &res0);
-	else
+	else {
+		ptst = strtol(adp,NULL,10);
+		if (ptst < 0 || ptst > 65535)
+			return(0);
 		ret = getaddrinfo(hop, adp, &hints, &res0);
+	}
 
 	free(hop);
 	free(adp);



More information about the varnish-commit mailing list