summaryrefslogblamecommitdiff
path: root/user/php7/getsockopt.patch
blob: 81f2bc2320fa4612a9e243acc7e3a47d79bfe7f0 (plain) (tree)



































                                                                                                                
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) {