diff --git a/ext/standard/tests/network/gh12190.phpt b/ext/standard/tests/network/gh12190.phpt new file mode 100644 index 00000000000..043e7f1b081 --- /dev/null +++ b/ext/standard/tests/network/gh12190.phpt @@ -0,0 +1,14 @@ +--TEST-- +Bug #12190 (Setting 0 with port 0 too) +--SKIPIF-- + +--FILE-- + ['bindto' => '0:0']]); +var_dump(file_get_contents('https://httpbin.org/get', false, $context) !== false); +?> +--EXPECT-- +bool(true) diff --git a/main/network.c b/main/network.c index ea3d17614f5..ba1080e8fe1 100644 --- a/main/network.c +++ b/main/network.c @@ -835,8 +835,8 @@ php_socket_t php_network_connect_socket_to_host(const char *host, unsigned short case AF_INET: ((struct sockaddr_in *)sa)->sin_port = htons(port); socklen = sizeof(struct sockaddr_in); - if (bindto && strchr(bindto, ':')) { - /* IPV4 sock cannot bind to IPV6 address */ + if (bindto && (strchr(bindto, ':') || !strcmp(bindto, "0"))) { + /* IPV4 sock can not bind to IPV6 address */ bindto = NULL; } break;