From: Anatol Belski Date: Mon, 17 Jul 2017 22:35:01 +0000 (+0200) Subject: fix regression introduced by 0782a7fc6314c8bd3cbfd57f12d0479bf9cc8dc7 X-Git-Tag: php-7.2.0beta1~7 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=a39fd995248d7974b1a84a1113deff86b3568d16;p=php fix regression introduced by 0782a7fc6314c8bd3cbfd57f12d0479bf9cc8dc7 --- diff --git a/ext/standard/dl.c b/ext/standard/dl.c index d32f02e8e6..1739648ffa 100644 --- a/ext/standard/dl.c +++ b/ext/standard/dl.c @@ -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);