]> granicus.if.org Git - php/commitdiff
- Don't load modules which have different debug and ZTS information than
authorAndi Gutmans <andi@php.net>
Sat, 11 Mar 2000 16:23:30 +0000 (16:23 +0000)
committerAndi Gutmans <andi@php.net>
Sat, 11 Mar 2000 16:23:30 +0000 (16:23 +0000)
  PHP() (untested). Not sure how to handle API version. Should it also not
  load? It probably should but it might bite us at some point.
@ Prevent from loading dynamic PHP modules which were compiled with different
  debug and thread safety modes than PHP, which resulted in a crash (Andi)

ext/standard/dl.c

index 369cb36a024f642bdc35fc2e76c51d670f9accb3..b9bfb288e578f8493e7193fe59c66a8f0bdfef75 100644 (file)
@@ -70,6 +70,12 @@ PHP_FUNCTION(dl)
 
 #ifdef HAVE_LIBDL
 
+#ifdef ZTS
+#define USING_ZTS 1
+#else
+#define USING_ZTS 0
+#endif
+
 void php_dl(pval *file,int type,pval *return_value)
 {
        void *handle;
@@ -126,6 +132,17 @@ void php_dl(pval *file,int type,pval *return_value)
                RETURN_FALSE;
        }
        module_entry = get_module();
+       if ((module_entry->zend_debug != ZEND_DEBUG) || (module_entry->zts != USING_ZTS)) {
+               php_error(E_CORE_WARNING,
+                                       "%s: Unable to initialize module\n"
+                                       "Module compiled with debug=%d, thread-safety=%d\n"
+                                       "PHP compiled with debug=%d, thread-safety=%d\n"
+                                       "These options need to match\n",
+                                       module_entry->name, module_entry->zend_debug, module_entry->zts,
+                                       ZEND_DEBUG, USING_ZTS);
+               DL_UNLOAD(handle);
+               RETURN_FALSE;
+       }
        module_entry->type = type;
        module_entry->module_number = zend_next_free_module();
        if (module_entry->module_startup_func) {