summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnatol Belski <ab@php.net>2017-04-27 11:11:41 +0200
committerJoe Watkins <krakjoe@php.net>2017-04-27 21:52:47 +0100
commitee9650c3d2b0ccc9bdeec3de33ad1950b8362005 (patch)
treeeb3708baebd071a4ab0004bd6d9402dc4a53a2d8
parent4951d16dba3b04657f09e6a804efd6b91cc9a187 (diff)
downloadphp-git-ee9650c3d2b0ccc9bdeec3de33ad1950b8362005.tar.gz
Merge branch 'PHP-7.0' into PHP-7.1php-7.1.5RC1
* PHP-7.0: Revert "Detect invalid port in xp_socket parse ip address" Revert "Follow up patch regarding bug #74216, see bug #74429"
-rw-r--r--ext/standard/tests/streams/parseip-001.phpt37
-rw-r--r--main/streams/xp_socket.c29
2 files changed, 11 insertions, 55 deletions
diff --git a/ext/standard/tests/streams/parseip-001.phpt b/ext/standard/tests/streams/parseip-001.phpt
deleted file mode 100644
index 594756db6b..0000000000
--- a/ext/standard/tests/streams/parseip-001.phpt
+++ /dev/null
@@ -1,37 +0,0 @@
---TEST--
-Use of double-port in fsockopen()
---FILE--
-<?php
-
-$try = [
- '127.0.0.1:80',
- 'tcp://127.0.0.1:80',
- '[::1]:80',
- 'tcp://[::1]:80',
- 'localhost:80',
- 'tcp://localhost:80',
-];
-
-foreach ($try as $addr) {
- echo "== $addr ==\n";
- var_dump(@fsockopen($addr, 81, $errno, $errstr), $errstr);
-}
---EXPECTF--
-== 127.0.0.1:80 ==
-bool(false)
-string(41) "Failed to parse address "127.0.0.1:80:81""
-== tcp://127.0.0.1:80 ==
-bool(false)
-string(41) "Failed to parse address "127.0.0.1:80:81""
-== [::1]:80 ==
-bool(false)
-string(37) "Failed to parse address "[::1]:80:81""
-== tcp://[::1]:80 ==
-bool(false)
-string(37) "Failed to parse address "[::1]:80:81""
-== localhost:80 ==
-bool(false)
-string(41) "Failed to parse address "localhost:80:81""
-== tcp://localhost:80 ==
-bool(false)
-string(41) "Failed to parse address "localhost:80:81"" \ No newline at end of file
diff --git a/main/streams/xp_socket.c b/main/streams/xp_socket.c
index b828bde081..e496a2d7fd 100644
--- a/main/streams/xp_socket.c
+++ b/main/streams/xp_socket.c
@@ -571,44 +571,37 @@ static inline char *parse_ip_address_ex(const char *str, size_t str_len, int *po
char *host = NULL;
#ifdef HAVE_IPV6
+ char *p;
+
if (*(str) == '[' && str_len > 1) {
/* IPV6 notation to specify raw address with port (i.e. [fe80::1]:80) */
- char *p = memchr(str + 1, ']', str_len - 2), *e = NULL;
+ p = memchr(str + 1, ']', str_len - 2);
if (!p || *(p + 1) != ':') {
if (get_err) {
*err = strpprintf(0, "Failed to parse IPv6 address \"%s\"", str);
}
return NULL;
}
- *portno = strtol(p + 2, &e, 10);
- if (e && *e && *e != '/') {
- if (get_err) {
- *err = strpprintf(0, "Failed to parse address \"%s\"", str);
- }
- return NULL;
- }
+ *portno = atoi(p + 2);
return estrndup(str + 1, p - str - 1);
}
#endif
-
if (str_len) {
colon = memchr(str, ':', str_len - 1);
} else {
colon = NULL;
}
-
if (colon) {
- char *e = NULL;
- *portno = strtol(colon + 1, &e, 10);
- if (!e || !*e || *e == '/') {
- return estrndup(str, colon - str);
+ *portno = atoi(colon + 1);
+ host = estrndup(str, colon - str);
+ } else {
+ if (get_err) {
+ *err = strpprintf(0, "Failed to parse address \"%s\"", str);
}
+ return NULL;
}
- if (get_err) {
- *err = strpprintf(0, "Failed to parse address \"%s\"", str);
- }
- return NULL;
+ return host;
}
static inline char *parse_ip_address(php_stream_xport_param *xparam, int *portno)