diff --git a/NEWS b/NEWS index 929eb33fc64..c979e645129 100644 --- a/NEWS +++ b/NEWS @@ -2,6 +2,9 @@ PHP NEWS ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ?? ??? 2016, PHP 7.2.0alpha1 +- Core: + . Fixed bug #54535 (WSA cleanup executes before MSHUTDOWN). (Kalle) + - EXIF: . Added support for vendor specific tags for the following formats: Sony, Samsung, DJI & Panasonic. (Kalle) diff --git a/main/main.c b/main/main.c index 0a1127176e7..248341c1141 100644 --- a/main/main.c +++ b/main/main.c @@ -2137,6 +2137,11 @@ int php_module_startup(sapi_module_struct *sf, zend_module_entry *additional_mod php_printf("\nwinsock.dll unusable. %d\n", WSAGetLastError()); return FAILURE; } + /* Check that we actually got the requested WSA version */ + if (LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion) != 0) { + php_printf("\nwinsock.dll unusable. Requested version: %d.%d, got %d.%d", LOBYTE(wVersionRequested), HIBYTE(wVersionRequested), LOBYTE(wsaData.wVersion), HIBYTE(wsaData.wVersion)); + return FAILURE; + } #endif le_index_ptr = zend_register_list_destructors_ex(NULL, NULL, "index pointer", 0); @@ -2387,11 +2392,6 @@ void php_module_shutdown(void) ts_free_worker_threads(); #endif -#if defined(PHP_WIN32) || (defined(NETWARE) && defined(USE_WINSOCK)) - /*close winsock */ - WSACleanup(); -#endif - #ifdef PHP_WIN32 php_win32_free_rng_lock(); #endif @@ -2400,6 +2400,11 @@ void php_module_shutdown(void) zend_shutdown(); +#if defined(PHP_WIN32) || (defined(NETWARE) && defined(USE_WINSOCK)) + /*close winsock */ + WSACleanup(); +#endif + /* Destroys filter & transport registries too */ php_shutdown_stream_wrappers(module_number);