diff options
author | Anatol Belski <ab@php.net> | 2019-03-31 14:01:36 +0200 |
---|---|---|
committer | Anatol Belski <ab@php.net> | 2019-03-31 14:26:00 +0200 |
commit | ddce7ada4c319dafa5cead0c0fb560a659f0763e (patch) | |
tree | 55a3992898232d92244b34574249fe5ac6809916 /main/php_ini.c | |
parent | 2733420f82a1ec5a6c8f1c1721efb0d5e186c0e9 (diff) | |
download | php-git-ddce7ada4c319dafa5cead0c0fb560a659f0763e.tar.gz |
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.
Diffstat (limited to 'main/php_ini.c')
-rw-r--r-- | main/php_ini.c | 17 |
1 files changed, 17 insertions, 0 deletions
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); } |