mirror of
https://github.com/php/php-src.git
synced 2024-09-23 19:07:26 +00:00
MFH: fix crash when parsing invalid hostnames/IPs
This commit is contained in:
parent
2f467baf94
commit
1cc0339d40
53
ext/standard/tests/file/stream_002.phpt
Normal file
53
ext/standard/tests/file/stream_002.phpt
Normal file
@ -0,0 +1,53 @@
|
||||
--TEST--
|
||||
stream_socket_client() and invalid arguments
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
$a = NULL;
|
||||
$b = NULL;
|
||||
var_dump(stream_socket_client("", $a, $b));
|
||||
var_dump($a, $b);
|
||||
var_dump(stream_socket_client("[", $a, $b));
|
||||
var_dump($a, $b);
|
||||
var_dump(stream_socket_client("[ ", $a, $b));
|
||||
var_dump($a, $b);
|
||||
var_dump(stream_socket_client(".", $a, $b));
|
||||
var_dump($a, $b);
|
||||
var_dump(stream_socket_client(1, $a, $b));
|
||||
var_dump($a, $b);
|
||||
var_dump(stream_socket_client(array(), $a, $b));
|
||||
var_dump($a, $b);
|
||||
|
||||
echo "Done\n";
|
||||
?>
|
||||
--EXPECTF--
|
||||
Warning: stream_socket_client(): unable to connect to (Failed to parse address "") in %s on line %d
|
||||
bool(false)
|
||||
int(0)
|
||||
string(26) "Failed to parse address """
|
||||
|
||||
Warning: stream_socket_client(): unable to connect to [ (Failed to parse address "[") in %s on line %d
|
||||
bool(false)
|
||||
int(0)
|
||||
string(27) "Failed to parse address "[""
|
||||
|
||||
Warning: stream_socket_client(): unable to connect to [ (Failed to parse IPv6 address "[ ") in %s on line %d
|
||||
bool(false)
|
||||
int(0)
|
||||
string(33) "Failed to parse IPv6 address "[ ""
|
||||
|
||||
Warning: stream_socket_client(): unable to connect to . (Failed to parse address ".") in %s on line %d
|
||||
bool(false)
|
||||
int(0)
|
||||
string(27) "Failed to parse address ".""
|
||||
|
||||
Warning: stream_socket_client(): unable to connect to 1 (Failed to parse address "1") in %s on line %d
|
||||
bool(false)
|
||||
int(0)
|
||||
string(27) "Failed to parse address "1""
|
||||
|
||||
Warning: stream_socket_client() expects parameter 1 to be string, array given in %s on line %d
|
||||
bool(false)
|
||||
int(0)
|
||||
string(27) "Failed to parse address "1""
|
||||
Done
|
@ -495,7 +495,7 @@ static inline char *parse_ip_address_ex(const char *str, int str_len, int *portn
|
||||
#ifdef HAVE_IPV6
|
||||
char *p;
|
||||
|
||||
if (*(str) == '[') {
|
||||
if (*(str) == '[' && str_len > 1) {
|
||||
/* IPV6 notation to specify raw address with port (i.e. [fe80::1]:80) */
|
||||
p = memchr(str + 1, ']', str_len - 2);
|
||||
if (!p || *(p + 1) != ':') {
|
||||
@ -508,8 +508,11 @@ static inline char *parse_ip_address_ex(const char *str, int str_len, int *portn
|
||||
return estrndup(str + 1, p - str - 1);
|
||||
}
|
||||
#endif
|
||||
|
||||
colon = memchr(str, ':', str_len - 1);
|
||||
if (str_len) {
|
||||
colon = memchr(str, ':', str_len - 1);
|
||||
} else {
|
||||
colon = NULL;
|
||||
}
|
||||
if (colon) {
|
||||
*portno = atoi(colon + 1);
|
||||
host = estrndup(str, colon - str);
|
||||
|
Loading…
Reference in New Issue
Block a user