|
|
|
@ -110,8 +110,9 @@ PHPAPI int php_load_extension(char *filename, int type, int start_now) |
|
|
|
char *libpath; |
|
|
|
zend_module_entry *module_entry; |
|
|
|
zend_module_entry *(*get_module)(void); |
|
|
|
int error_type, slash_suffix; |
|
|
|
int error_type, slash_suffix = NULL; |
|
|
|
char *extension_dir; |
|
|
|
char *err1, *err2; |
|
|
|
|
|
|
|
if (type == MODULE_PERSISTENT) { |
|
|
|
extension_dir = INI_STR("extension_dir"); |
|
|
|
@ -135,7 +136,6 @@ PHPAPI int php_load_extension(char *filename, int type, int start_now) |
|
|
|
libpath = estrdup(filename); |
|
|
|
} else if (extension_dir && extension_dir[0]) { |
|
|
|
int extension_dir_len = (int)strlen(extension_dir); |
|
|
|
char *err1, *err2; |
|
|
|
slash_suffix = IS_SLASH(extension_dir[extension_dir_len-1]); |
|
|
|
/* Try as filename first */ |
|
|
|
if (slash_suffix) { |
|
|
|
@ -143,33 +143,33 @@ PHPAPI int php_load_extension(char *filename, int type, int start_now) |
|
|
|
} else { |
|
|
|
spprintf(&libpath, 0, "%s%c%s", extension_dir, DEFAULT_SLASH, filename); /* SAFE */ |
|
|
|
} |
|
|
|
} else { |
|
|
|
return FAILURE; /* Not full path given or extension_dir is not set */ |
|
|
|
} |
|
|
|
|
|
|
|
handle = php_load_shlib(libpath, &err1); |
|
|
|
if (!handle) { |
|
|
|
/* Now, consider 'filename' as extension name and build file name */ |
|
|
|
char *orig_libpath = libpath; |
|
|
|
|
|
|
|
if (slash_suffix) { |
|
|
|
spprintf(&libpath, 0, "%s" PHP_SHLIB_EXT_PREFIX "%s." PHP_SHLIB_SUFFIX, extension_dir, filename); /* SAFE */ |
|
|
|
} else { |
|
|
|
spprintf(&libpath, 0, "%s%c" PHP_SHLIB_EXT_PREFIX "%s." PHP_SHLIB_SUFFIX, extension_dir, DEFAULT_SLASH, filename); /* SAFE */ |
|
|
|
} |
|
|
|
|
|
|
|
handle = php_load_shlib(libpath, &err1); |
|
|
|
handle = php_load_shlib(libpath, &err2); |
|
|
|
if (!handle) { |
|
|
|
/* Now, consider 'filename' as extension name and build file name */ |
|
|
|
char *orig_libpath = libpath; |
|
|
|
|
|
|
|
if (slash_suffix) { |
|
|
|
spprintf(&libpath, 0, "%s" PHP_SHLIB_EXT_PREFIX "%s." PHP_SHLIB_SUFFIX, extension_dir, filename); /* SAFE */ |
|
|
|
} else { |
|
|
|
spprintf(&libpath, 0, "%s%c" PHP_SHLIB_EXT_PREFIX "%s." PHP_SHLIB_SUFFIX, extension_dir, DEFAULT_SLASH, filename); /* SAFE */ |
|
|
|
} |
|
|
|
|
|
|
|
handle = php_load_shlib(libpath, &err2); |
|
|
|
if (!handle) { |
|
|
|
php_error_docref(NULL, error_type, "Unable to load dynamic library '%s' (tried: %s (%s), %s (%s))", |
|
|
|
filename, orig_libpath, err1, libpath, err2); |
|
|
|
efree(orig_libpath); |
|
|
|
efree(err1); |
|
|
|
efree(libpath); |
|
|
|
efree(err2); |
|
|
|
return FAILURE; |
|
|
|
} |
|
|
|
php_error_docref(NULL, error_type, "Unable to load dynamic library '%s' (tried: %s (%s), %s (%s))", |
|
|
|
filename, orig_libpath, err1, libpath, err2); |
|
|
|
efree(orig_libpath); |
|
|
|
efree(err1); |
|
|
|
efree(libpath); |
|
|
|
efree(err2); |
|
|
|
return FAILURE; |
|
|
|
} |
|
|
|
} else { |
|
|
|
return FAILURE; /* Not full path given or extension_dir is not set */ |
|
|
|
efree(orig_libpath); |
|
|
|
efree(err1); |
|
|
|
} |
|
|
|
|
|
|
|
efree(libpath); |
|
|
|
|