]> granicus.if.org Git - php/commitdiff
Fix bug #73192
authorNikita Popov <nikic@php.net>
Fri, 7 Oct 2016 23:04:22 +0000 (01:04 +0200)
committerNikita Popov <nikic@php.net>
Fri, 7 Oct 2016 23:04:22 +0000 (01:04 +0200)
ext/standard/tests/url/bug73192.phpt [new file with mode: 0644]
ext/standard/tests/url/parse_url_basic_001.phpt
ext/standard/tests/url/parse_url_basic_002.phpt
ext/standard/tests/url/parse_url_basic_003.phpt
ext/standard/tests/url/parse_url_basic_004.phpt
ext/standard/tests/url/parse_url_basic_005.phpt
ext/standard/tests/url/parse_url_basic_006.phpt
ext/standard/tests/url/parse_url_basic_007.phpt
ext/standard/tests/url/parse_url_basic_008.phpt
ext/standard/tests/url/parse_url_basic_009.phpt
ext/standard/url.c

diff --git a/ext/standard/tests/url/bug73192.phpt b/ext/standard/tests/url/bug73192.phpt
new file mode 100644 (file)
index 0000000..6ecb477
--- /dev/null
@@ -0,0 +1,30 @@
+--TEST--
+Bug #73192: parse_url return wrong hostname
+--FILE--
+<?php
+
+var_dump(parse_url("http://example.com:80#@google.com/"));
+var_dump(parse_url("http://example.com:80?@google.com/"));
+
+?>
+--EXPECT--
+array(4) {
+  ["scheme"]=>
+  string(4) "http"
+  ["host"]=>
+  string(11) "example.com"
+  ["port"]=>
+  int(80)
+  ["fragment"]=>
+  string(12) "@google.com/"
+}
+array(4) {
+  ["scheme"]=>
+  string(4) "http"
+  ["host"]=>
+  string(11) "example.com"
+  ["port"]=>
+  int(80)
+  ["query"]=>
+  string(12) "@google.com/"
+}
index 0708691fe3ac84c59a54d1d8a38d820dabfffed8..e468066a421a7fbe1fcd14c847a8ba86f6b76495 100644 (file)
@@ -763,25 +763,9 @@ echo "Done";
   int(6)
 }
 
---> http://?:/: array(3) {
-  ["scheme"]=>
-  string(4) "http"
-  ["host"]=>
-  string(1) "?"
-  ["path"]=>
-  string(1) "/"
-}
+--> http://?:/: bool(false)
 
---> http://@?:/: array(4) {
-  ["scheme"]=>
-  string(4) "http"
-  ["host"]=>
-  string(1) "?"
-  ["user"]=>
-  string(0) ""
-  ["path"]=>
-  string(1) "/"
-}
+--> http://@?:/: bool(false)
 
 --> file:///:: array(2) {
   ["scheme"]=>
index c05d1f487ab2b749320ad5156b6ba448a168e62e..f222ffccf3853199752854f83b789ce5f8c0f6ae 100644 (file)
@@ -98,8 +98,8 @@ echo "Done";
 --> http://::?   : string(4) "http"
 --> http://::#   : string(4) "http"
 --> x://::6.5   : string(1) "x"
---> http://?:/   : string(4) "http"
---> http://@?:/   : string(4) "http"
+--> http://?:/   : bool(false)
+--> http://@?:/   : bool(false)
 --> file:///:   : string(4) "file"
 --> file:///a:/   : string(4) "file"
 --> file:///ab:/   : string(4) "file"
index 88eda504d561af6da05e2b749282ae0803f6bd30..70dc4bb90b6b67bc8c1c69a2708d19c82735e4b7 100644 (file)
@@ -97,8 +97,8 @@ echo "Done";
 --> http://::?   : string(1) ":"
 --> http://::#   : string(1) ":"
 --> x://::6.5   : string(1) ":"
---> http://?:/   : string(1) "?"
---> http://@?:/   : string(1) "?"
+--> http://?:/   : bool(false)
+--> http://@?:/   : bool(false)
 --> file:///:   : NULL
 --> file:///a:/   : NULL
 --> file:///ab:/   : NULL
index e3b9abd91ccf55ffd77fc7413a13e58bac8f69ea..7ddddaf71618315213bef0a7b04c5968c2e05a14 100644 (file)
@@ -97,8 +97,8 @@ echo "Done";
 --> http://::?   : NULL
 --> http://::#   : NULL
 --> x://::6.5   : int(6)
---> http://?:/   : NULL
---> http://@?:/   : NULL
+--> http://?:/   : bool(false)
+--> http://@?:/   : bool(false)
 --> file:///:   : NULL
 --> file:///a:/   : NULL
 --> file:///ab:/   : NULL
index 5b2cb98f8bfc8404b512045ab3149c9e69fdc3fa..b2ca06ff9603e4b4c13226902e603555cf162e6f 100644 (file)
@@ -97,8 +97,8 @@ echo "Done";
 --> http://::?   : NULL
 --> http://::#   : NULL
 --> x://::6.5   : NULL
---> http://?:/   : NULL
---> http://@?:/   : string(0) ""
+--> http://?:/   : bool(false)
+--> http://@?:/   : bool(false)
 --> file:///:   : NULL
 --> file:///a:/   : NULL
 --> file:///ab:/   : NULL
index 79af6b8b626748a4b3bd1347d39ca68418a2543a..f0c251bb55629ed17ab9c12c49e6ecabb0da03ae 100644 (file)
@@ -97,8 +97,8 @@ echo "Done";
 --> http://::?   : NULL
 --> http://::#   : NULL
 --> x://::6.5   : NULL
---> http://?:/   : NULL
---> http://@?:/   : NULL
+--> http://?:/   : bool(false)
+--> http://@?:/   : bool(false)
 --> file:///:   : NULL
 --> file:///a:/   : NULL
 --> file:///ab:/   : NULL
index 8e0455398360202861e6e5a68a27fe44443516a9..1b362bb01367c510e56c3c8ce207fc9a18463881 100644 (file)
@@ -97,8 +97,8 @@ echo "Done";
 --> http://::?   : NULL
 --> http://::#   : NULL
 --> x://::6.5   : NULL
---> http://?:/   : string(1) "/"
---> http://@?:/   : string(1) "/"
+--> http://?:/   : bool(false)
+--> http://@?:/   : bool(false)
 --> file:///:   : string(2) "/:"
 --> file:///a:/   : string(3) "a:/"
 --> file:///ab:/   : string(5) "/ab:/"
index 0c77221465e7827464bcd481987dffc067bead8a..1271f3838c559ea355c06499c75e8e5d37d751fc 100644 (file)
@@ -97,8 +97,8 @@ echo "Done";
 --> http://::?   : NULL
 --> http://::#   : NULL
 --> x://::6.5   : NULL
---> http://?:/   : NULL
---> http://@?:/   : NULL
+--> http://?:/   : bool(false)
+--> http://@?:/   : bool(false)
 --> file:///:   : NULL
 --> file:///a:/   : NULL
 --> file:///ab:/   : NULL
index 487b2711497379dd9dfe4d75ef18ed6e85f136cf..72f172a55b5100c47866a8c8513d7ec48ee6638e 100644 (file)
@@ -97,8 +97,8 @@ echo "Done";
 --> http://::?   : NULL
 --> http://::#   : NULL
 --> x://::6.5   : NULL
---> http://?:/   : NULL
---> http://@?:/   : NULL
+--> http://?:/   : bool(false)
+--> http://@?:/   : bool(false)
 --> file:///:   : NULL
 --> file:///a:/   : NULL
 --> file:///ab:/   : NULL
index dd861a570d8c0120a28492c5cc6f07435eb2b63f..962718459ae694e29020c53efd1ac2be8d35667c 100644 (file)
@@ -217,28 +217,7 @@ PHPAPI php_url *php_url_parse_ex(char const *str, int length)
                goto nohost;
        }
 
-       e = ue;
-
-       if (!(p = memchr(s, '/', (ue - s)))) {
-               char *query, *fragment;
-
-               query = memchr(s, '?', (ue - s));
-               fragment = memchr(s, '#', (ue - s));
-
-               if (query && fragment) {
-                       if (query > fragment) {
-                               e = fragment;
-                       } else {
-                               e = query;
-                       }
-               } else if (query) {
-                       e = query;
-               } else if (fragment) {
-                       e = fragment;
-               }
-       } else {
-               e = p;
-       }
+       e = s + strcspn(s, "/?#");
 
        /* check for login and password */
        if ((p = zend_memrchr(s, '@', (e-s)))) {