Skip to content

Commit 56a8baf

Browse files
committed
parse_url raises ValueError in some error code paths.
1 parent 479b47c commit 56a8baf

12 files changed

+235
-184
lines changed

ext/standard/tests/url/bug55399.phpt

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,12 @@ Bug #55399 (parse_url() incorrectly treats ':' as a valid path)
33
--FILE--
44
<?php
55

6-
var_dump(parse_url(":"));
6+
try {
7+
parse_url(":");
8+
} catch(ValueError $e) {
9+
echo $e->getMessage();
10+
}
711

812
?>
913
--EXPECT--
10-
bool(false)
14+
Invalid path (:)

ext/standard/tests/url/parse_url_basic_001.phpt

Lines changed: 22 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,11 @@ include_once(__DIR__ . '/urls.inc');
99

1010
foreach ($urls as $url) {
1111
echo "\n--> $url: ";
12-
var_dump(parse_url($url));
12+
try {
13+
var_dump(parse_url($url));
14+
} catch (ValueError $e) {
15+
echo $e->getMessage() . "\n";
16+
}
1317
}
1418

1519
echo "Done";
@@ -762,7 +766,7 @@ echo "Done";
762766
string(9) "/blah.com"
763767
}
764768

765-
--> x://::abc/?: bool(false)
769+
--> x://::abc/?: Invalid port (abc)
766770

767771
--> http://::?: array(3) {
768772
["scheme"]=>
@@ -791,9 +795,9 @@ echo "Done";
791795
int(6)
792796
}
793797

794-
--> http://?:/: bool(false)
798+
--> http://?:/: Invalid host (?:/)
795799

796-
--> http://@?:/: bool(false)
800+
--> http://@?:/: Invalid host (?:/)
797801

798802
--> file:///:: array(2) {
799803
["scheme"]=>
@@ -884,31 +888,31 @@ echo "Done";
884888
string(1) "/"
885889
}
886890

887-
--> http:///blah.com: bool(false)
891+
--> http:///blah.com: Invalid host (/blah.com)
888892

889-
--> http://:80: bool(false)
893+
--> http://:80: Invalid host (:80)
890894

891-
--> http://user@:80: bool(false)
895+
--> http://user@:80: Invalid host (:80)
892896

893-
--> http://user:pass@:80: bool(false)
897+
--> http://user:pass@:80: Invalid host (:80)
894898

895-
--> http://:: bool(false)
899+
--> http://:: Invalid host (:)
896900

897-
--> http://@/: bool(false)
901+
--> http://@/: Invalid host (/)
898902

899-
--> http://@:/: bool(false)
903+
--> http://@:/: Invalid host (:/)
900904

901-
--> http://:/: bool(false)
905+
--> http://:/: Invalid host (:/)
902906

903-
--> http://?: bool(false)
907+
--> http://?: Invalid host (?)
904908

905-
--> http://#: bool(false)
909+
--> http://#: Invalid host (#)
906910

907-
--> http://?:: bool(false)
911+
--> http://?:: Invalid host (?:)
908912

909-
--> http://:?: bool(false)
913+
--> http://:?: Invalid host (:?)
910914

911-
--> http://blah.com:123456: bool(false)
915+
--> http://blah.com:123456: Invalid port (123456)
912916

913-
--> http://blah.com:abcdef: bool(false)
917+
--> http://blah.com:abcdef: Invalid port (abcdef)
914918
Done

ext/standard/tests/url/parse_url_basic_002.phpt

Lines changed: 22 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,11 @@ include_once(__DIR__ . '/urls.inc');
99

1010
foreach ($urls as $url) {
1111
echo "--> $url : ";
12-
var_dump(parse_url($url, PHP_URL_SCHEME));
12+
try {
13+
var_dump(parse_url($url, PHP_URL_SCHEME));
14+
} catch (ValueError $e) {
15+
echo $e->getMessage() . "\n";
16+
}
1317

1418
}
1519

@@ -89,12 +93,12 @@ echo "Done";
8993
--> http://x:? : string(4) "http"
9094
--> x:blah.com : string(1) "x"
9195
--> x:/blah.com : string(1) "x"
92-
--> x://::abc/? : bool(false)
96+
--> x://::abc/? : Invalid port (abc)
9397
--> http://::? : string(4) "http"
9498
--> http://::# : string(4) "http"
9599
--> x://::6.5 : string(1) "x"
96-
--> http://?:/ : bool(false)
97-
--> http://@?:/ : bool(false)
100+
--> http://?:/ : Invalid host (?:/)
101+
--> http://@?:/ : Invalid host (?:/)
98102
--> file:///: : string(4) "file"
99103
--> file:///a:/ : string(4) "file"
100104
--> file:///ab:/ : string(4) "file"
@@ -108,18 +112,18 @@ echo "Done";
108112
--> /rest/Users?filter={"id":"123"} : NULL
109113
--> %:x : NULL
110114
--> https://example.com:0/ : string(5) "https"
111-
--> http:///blah.com : bool(false)
112-
--> http://:80 : bool(false)
113-
--> http://user@:80 : bool(false)
114-
--> http://user:pass@:80 : bool(false)
115-
--> http://: : bool(false)
116-
--> http://@/ : bool(false)
117-
--> http://@:/ : bool(false)
118-
--> http://:/ : bool(false)
119-
--> http://? : bool(false)
120-
--> http://# : bool(false)
121-
--> http://?: : bool(false)
122-
--> http://:? : bool(false)
123-
--> http://blah.com:123456 : bool(false)
124-
--> http://blah.com:abcdef : bool(false)
115+
--> http:///blah.com : Invalid host (/blah.com)
116+
--> http://:80 : Invalid host (:80)
117+
--> http://user@:80 : Invalid host (:80)
118+
--> http://user:pass@:80 : Invalid host (:80)
119+
--> http://: : Invalid host (:)
120+
--> http://@/ : Invalid host (/)
121+
--> http://@:/ : Invalid host (:/)
122+
--> http://:/ : Invalid host (:/)
123+
--> http://? : Invalid host (?)
124+
--> http://# : Invalid host (#)
125+
--> http://?: : Invalid host (?:)
126+
--> http://:? : Invalid host (:?)
127+
--> http://blah.com:123456 : Invalid port (123456)
128+
--> http://blah.com:abcdef : Invalid port (abcdef)
125129
Done

ext/standard/tests/url/parse_url_basic_003.phpt

Lines changed: 22 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,11 @@ include_once(__DIR__ . '/urls.inc');
99

1010
foreach ($urls as $url) {
1111
echo "--> $url : ";
12-
var_dump(parse_url($url, PHP_URL_HOST));
12+
try {
13+
var_dump(parse_url($url, PHP_URL_HOST));
14+
} catch (ValueError $e) {
15+
echo $e->getMessage() . "\n";
16+
}
1317
}
1418

1519
echo "Done";
@@ -88,12 +92,12 @@ echo "Done";
8892
--> http://x:? : string(1) "x"
8993
--> x:blah.com : NULL
9094
--> x:/blah.com : NULL
91-
--> x://::abc/? : bool(false)
95+
--> x://::abc/? : Invalid port (abc)
9296
--> http://::? : string(1) ":"
9397
--> http://::# : string(1) ":"
9498
--> x://::6.5 : string(1) ":"
95-
--> http://?:/ : bool(false)
96-
--> http://@?:/ : bool(false)
99+
--> http://?:/ : Invalid host (?:/)
100+
--> http://@?:/ : Invalid host (?:/)
97101
--> file:///: : NULL
98102
--> file:///a:/ : NULL
99103
--> file:///ab:/ : NULL
@@ -107,18 +111,18 @@ echo "Done";
107111
--> /rest/Users?filter={"id":"123"} : NULL
108112
--> %:x : NULL
109113
--> https://example.com:0/ : string(11) "example.com"
110-
--> http:///blah.com : bool(false)
111-
--> http://:80 : bool(false)
112-
--> http://user@:80 : bool(false)
113-
--> http://user:pass@:80 : bool(false)
114-
--> http://: : bool(false)
115-
--> http://@/ : bool(false)
116-
--> http://@:/ : bool(false)
117-
--> http://:/ : bool(false)
118-
--> http://? : bool(false)
119-
--> http://# : bool(false)
120-
--> http://?: : bool(false)
121-
--> http://:? : bool(false)
122-
--> http://blah.com:123456 : bool(false)
123-
--> http://blah.com:abcdef : bool(false)
114+
--> http:///blah.com : Invalid host (/blah.com)
115+
--> http://:80 : Invalid host (:80)
116+
--> http://user@:80 : Invalid host (:80)
117+
--> http://user:pass@:80 : Invalid host (:80)
118+
--> http://: : Invalid host (:)
119+
--> http://@/ : Invalid host (/)
120+
--> http://@:/ : Invalid host (:/)
121+
--> http://:/ : Invalid host (:/)
122+
--> http://? : Invalid host (?)
123+
--> http://# : Invalid host (#)
124+
--> http://?: : Invalid host (?:)
125+
--> http://:? : Invalid host (:?)
126+
--> http://blah.com:123456 : Invalid port (123456)
127+
--> http://blah.com:abcdef : Invalid port (abcdef)
124128
Done

ext/standard/tests/url/parse_url_basic_004.phpt

Lines changed: 22 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,11 @@ include_once(__DIR__ . '/urls.inc');
99

1010
foreach ($urls as $url) {
1111
echo "--> $url : ";
12-
var_dump(parse_url($url, PHP_URL_PORT));
12+
try {
13+
var_dump(parse_url($url, PHP_URL_PORT));
14+
} catch (ValueError $e) {
15+
echo $e->getMessage() . "\n";
16+
}
1317
}
1418

1519
echo "Done";
@@ -88,12 +92,12 @@ echo "Done";
8892
--> http://x:? : NULL
8993
--> x:blah.com : NULL
9094
--> x:/blah.com : NULL
91-
--> x://::abc/? : bool(false)
95+
--> x://::abc/? : Invalid port (abc)
9296
--> http://::? : NULL
9397
--> http://::# : NULL
9498
--> x://::6.5 : int(6)
95-
--> http://?:/ : bool(false)
96-
--> http://@?:/ : bool(false)
99+
--> http://?:/ : Invalid host (?:/)
100+
--> http://@?:/ : Invalid host (?:/)
97101
--> file:///: : NULL
98102
--> file:///a:/ : NULL
99103
--> file:///ab:/ : NULL
@@ -107,18 +111,18 @@ echo "Done";
107111
--> /rest/Users?filter={"id":"123"} : NULL
108112
--> %:x : NULL
109113
--> https://example.com:0/ : int(0)
110-
--> http:///blah.com : bool(false)
111-
--> http://:80 : bool(false)
112-
--> http://user@:80 : bool(false)
113-
--> http://user:pass@:80 : bool(false)
114-
--> http://: : bool(false)
115-
--> http://@/ : bool(false)
116-
--> http://@:/ : bool(false)
117-
--> http://:/ : bool(false)
118-
--> http://? : bool(false)
119-
--> http://# : bool(false)
120-
--> http://?: : bool(false)
121-
--> http://:? : bool(false)
122-
--> http://blah.com:123456 : bool(false)
123-
--> http://blah.com:abcdef : bool(false)
114+
--> http:///blah.com : Invalid host (/blah.com)
115+
--> http://:80 : Invalid host (:80)
116+
--> http://user@:80 : Invalid host (:80)
117+
--> http://user:pass@:80 : Invalid host (:80)
118+
--> http://: : Invalid host (:)
119+
--> http://@/ : Invalid host (/)
120+
--> http://@:/ : Invalid host (:/)
121+
--> http://:/ : Invalid host (:/)
122+
--> http://? : Invalid host (?)
123+
--> http://# : Invalid host (#)
124+
--> http://?: : Invalid host (?:)
125+
--> http://:? : Invalid host (:?)
126+
--> http://blah.com:123456 : Invalid port (123456)
127+
--> http://blah.com:abcdef : Invalid port (abcdef)
124128
Done

ext/standard/tests/url/parse_url_basic_005.phpt

Lines changed: 22 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,11 @@ include_once(__DIR__ . '/urls.inc');
99

1010
foreach ($urls as $url) {
1111
echo "--> $url : ";
12-
var_dump(parse_url($url, PHP_URL_USER));
12+
try {
13+
var_dump(parse_url($url, PHP_URL_USER));
14+
} catch (ValueError $e) {
15+
echo $e->getMessage() . "\n";
16+
}
1317
}
1418

1519
echo "Done";
@@ -88,12 +92,12 @@ echo "Done";
8892
--> http://x:? : NULL
8993
--> x:blah.com : NULL
9094
--> x:/blah.com : NULL
91-
--> x://::abc/? : bool(false)
95+
--> x://::abc/? : Invalid port (abc)
9296
--> http://::? : NULL
9397
--> http://::# : NULL
9498
--> x://::6.5 : NULL
95-
--> http://?:/ : bool(false)
96-
--> http://@?:/ : bool(false)
99+
--> http://?:/ : Invalid host (?:/)
100+
--> http://@?:/ : Invalid host (?:/)
97101
--> file:///: : NULL
98102
--> file:///a:/ : NULL
99103
--> file:///ab:/ : NULL
@@ -107,18 +111,18 @@ echo "Done";
107111
--> /rest/Users?filter={"id":"123"} : NULL
108112
--> %:x : NULL
109113
--> https://example.com:0/ : NULL
110-
--> http:///blah.com : bool(false)
111-
--> http://:80 : bool(false)
112-
--> http://user@:80 : bool(false)
113-
--> http://user:pass@:80 : bool(false)
114-
--> http://: : bool(false)
115-
--> http://@/ : bool(false)
116-
--> http://@:/ : bool(false)
117-
--> http://:/ : bool(false)
118-
--> http://? : bool(false)
119-
--> http://# : bool(false)
120-
--> http://?: : bool(false)
121-
--> http://:? : bool(false)
122-
--> http://blah.com:123456 : bool(false)
123-
--> http://blah.com:abcdef : bool(false)
114+
--> http:///blah.com : Invalid host (/blah.com)
115+
--> http://:80 : Invalid host (:80)
116+
--> http://user@:80 : Invalid host (:80)
117+
--> http://user:pass@:80 : Invalid host (:80)
118+
--> http://: : Invalid host (:)
119+
--> http://@/ : Invalid host (/)
120+
--> http://@:/ : Invalid host (:/)
121+
--> http://:/ : Invalid host (:/)
122+
--> http://? : Invalid host (?)
123+
--> http://# : Invalid host (#)
124+
--> http://?: : Invalid host (?:)
125+
--> http://:? : Invalid host (:?)
126+
--> http://blah.com:123456 : Invalid port (123456)
127+
--> http://blah.com:abcdef : Invalid port (abcdef)
124128
Done

0 commit comments

Comments
 (0)