From ddce7ada4c319dafa5cead0c0fb560a659f0763e Mon Sep 17 00:00:00 2001 From: Anatol Belski Date: Sun, 31 Mar 2019 14:01:36 +0200 Subject: Implement stricter extension compatibility check This hardens the dynamic module loading by checking the linker compatibility between the core and the dynamic module. This likely should be extended for the CRT as well, as 2015, 2017 and 2019 versions of Visual Studio all have same DLL name for the CRT. --- main/php_ini.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'main/php_ini.c') diff --git a/main/php_ini.c b/main/php_ini.c index 7d4e916432..f4c61820ae 100644 --- a/main/php_ini.c +++ b/main/php_ini.c @@ -339,6 +339,13 @@ static void php_load_zend_extension_cb(void *arg) #endif if (IS_ABSOLUTE_PATH(filename, length)) { +#ifdef PHP_WIN32 + char *err; + if (!php_win32_image_compatible(filename, NULL, &err)) { + php_error(E_CORE_WARNING, err); + return FAILURE; + } +#endif zend_load_extension(filename); } else { DL_HANDLE handle; @@ -384,6 +391,16 @@ static void php_load_zend_extension_cb(void *arg) efree(err1); } +#ifdef PHP_WIN32 + if (!php_win32_image_compatible(libpath, NULL, &err1)) { + php_error(E_CORE_WARNING, err1); + efree(err1); + efree(libpath); + DL_UNLOAD(handle); + return FAILURE; + } +#endif + zend_load_extension_handle(handle, libpath); efree(libpath); } -- cgit v1.2.1