diff --git a/NEWS b/NEWS index 23bfdcebada..9384a7fb473 100644 --- a/NEWS +++ b/NEWS @@ -36,6 +36,10 @@ PHP NEWS foreach). (nielsdos) . Fixed bug #55098 (SimpleXML iteration produces infinite loop). (nielsdos) +- Streams: + . Fixed bug GH-12190 (binding ipv4 address with both address and port at 0). + (David Carlier) + - XML: . Fix return type of stub of xml_parse_into_struct(). (nielsdos) . Fix memory leak when calling xml_parse_into_struct() twice. (nielsdos) 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 b4799791bd3..f2369a1ae20 100644 --- a/main/network.c +++ b/main/network.c @@ -835,7 +835,7 @@ 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, ':')) { + if (bindto && (strchr(bindto, ':') || !strcmp(bindto, "0"))) { /* IPV4 sock can not bind to IPV6 address */ bindto = NULL; }