diff options
Diffstat (limited to 'user/php7/getsockopt.patch')
-rw-r--r-- | user/php7/getsockopt.patch | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/user/php7/getsockopt.patch b/user/php7/getsockopt.patch new file mode 100644 index 000000000..81f2bc232 --- /dev/null +++ b/user/php7/getsockopt.patch @@ -0,0 +1,37 @@ +Socket options with level IPPROTO_IP and IPPROTO_IPV6 cannot be handled +in the same switch statement as options with level SOL_SOCKET since +there may be collisions in their numerical values. + +For example, on ppc64: + +* IPV6_MULTICAST_HOPS and SO_RCVTIMEO are both 18 +* IPV6_MULTICAST_LOOP and SO_SNDTIMEO are both 19 + +etc. + +--- php-7.4.4/ext/sockets/sockets.c 2020-03-17 06:40:21.000000000 -0400 ++++ php-7.4.4/ext/sockets/sockets.c 2020-03-29 22:39:57.506751737 -0400 +@@ -2008,6 +2008,7 @@ PHP_FUNCTION(socket_get_option) + } + } + } ++ goto handle_default; + } + #if HAVE_IPV6 + else if (level == IPPROTO_IPV6) { +@@ -2017,6 +2018,7 @@ PHP_FUNCTION(socket_get_option) + } else if (ret == FAILURE) { + RETURN_FALSE; + } /* else continue */ ++ goto handle_default; + } + #endif + +@@ -2063,6 +2065,7 @@ PHP_FUNCTION(socket_get_option) + break; + + default: ++ handle_default: + optlen = sizeof(other_val); + + if (getsockopt(php_sock->bsd_socket, level, optname, (char*)&other_val, &optlen) != 0) { |