summaryrefslogtreecommitdiff
path: root/main/php_ini.c
diff options
context:
space:
mode:
authorAnatol Belski <ab@php.net>2019-03-31 14:01:36 +0200
committerAnatol Belski <ab@php.net>2019-03-31 14:26:00 +0200
commitddce7ada4c319dafa5cead0c0fb560a659f0763e (patch)
tree55a3992898232d92244b34574249fe5ac6809916 /main/php_ini.c
parent2733420f82a1ec5a6c8f1c1721efb0d5e186c0e9 (diff)
downloadphp-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.c17
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);
}