php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Return to Bug #55073
Patch php-cli-server-ipv6 revision 2011-06-29 21:33 UTC by fa at art-core dot org

Patch php-cli-server-ipv6 for Built-in web server Bug #55073

Patch version 2011-06-29 21:33 UTC

Return to Bug #55073 | Download this patch
Patch Revisions:

Developer: fa@art-core.org

--- sapi/cli/php_cli_server.c.old	2011-06-29 09:08:28.971479778 +0200
+++ sapi/cli/php_cli_server.c	2011-06-28 19:43:23.123167815 +0200
@@ -1799,13 +1799,28 @@
 	}
 
 	{
-		char *p = strchr(host, ':');
-		if (p) {
+		char *p = strrchr(host, ':');
+		char *end = strchr(host, ']');
+		if (p && (end == NULL || p > end)) {
 			*p++ = '\0';
 			port = strtol(p, &p, 10);
+			if (port < 0 || port > 65535) {
+				printf(stderr, "Invalid built-in web-server addr:port argument\n");
+				return FAILURE;
+			}
 		}
 	}
 
+	if (*host == '[' && host[strlen(host)-1] == ']') {
+		char v6address[40];
+		int success = sscanf(host, "\[%39[^]]\]", v6address);
+		if (success != 1) {
+			php_cli_server_logf("Failed to listen on %s:%d (reason: %s)" TSRMLS_CC, host, port, errstr ? errstr: "?");
+			return FAILURE;
+		}
+		host = pestrdup(v6address, 1);
+	}
+
 	server_sock = php_network_listen_socket(host, &port, SOCK_STREAM, &server->address_family, &server->socklen, &errstr TSRMLS_CC);
 	if (server_sock == SOCK_ERR) {
 		php_cli_server_logf("Failed to listen on %s:%d (reason: %s)" TSRMLS_CC, host, port, errstr ? errstr: "?");

 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Tue Apr 23 09:01:27 2024 UTC