1 backport extension loading from 5.3
3 this allows to load permanent modules with full path (eases make test code)
5 --- php-5.2.14/ext/standard/dl.c~ 2010-10-31 17:07:21.000000000 +0200
6 +++ php-5.2.14/ext/standard/dl.c 2010-10-31 17:27:21.409467169 +0200
8 zend_module_entry *(*get_module)(void);
11 + char *filename = Z_STRVAL_P(file);
13 if (type == MODULE_PERSISTENT) {
14 extension_dir = INI_STR("extension_dir");
16 error_type = E_CORE_WARNING;
19 - if (extension_dir && extension_dir[0]){
20 - int extension_dir_len = strlen(extension_dir);
22 + /* Check if passed filename contains directory separators */
23 + if (strchr(filename, '/') != NULL || strchr(filename, DEFAULT_SLASH) != NULL) {
24 + /* Passing modules with full path is not supported for dynamically loaded extensions */
25 if (type == MODULE_TEMPORARY) {
26 - if (strchr(Z_STRVAL_P(file), '/') != NULL || strchr(Z_STRVAL_P(file), DEFAULT_SLASH) != NULL) {
27 - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Temporary module name should contain only filename");
30 + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Temporary module name should contain only filename");
33 + libpath = estrdup(filename);
34 + } else if (extension_dir && extension_dir[0]) {
35 + int extension_dir_len = strlen(extension_dir);
37 if (IS_SLASH(extension_dir[extension_dir_len-1])) {
38 - spprintf(&libpath, 0, "%s%s", extension_dir, Z_STRVAL_P(file));
39 + spprintf(&libpath, 0, "%s%s", extension_dir, filename); /* SAFE */
41 - spprintf(&libpath, 0, "%s%c%s", extension_dir, DEFAULT_SLASH, Z_STRVAL_P(file));
42 + spprintf(&libpath, 0, "%s%c%s", extension_dir, DEFAULT_SLASH, filename); /* SAFE */
45 - libpath = estrndup(Z_STRVAL_P(file), Z_STRLEN_P(file));
46 + return FAILURE; /* Not full path given or extension_dir is not set */
49 /* load dynamic symbol */