From: Patrick Allaert Date: Tue, 9 Jul 2013 13:05:10 +0000 (+0200) Subject: Fixed #65225: PHP_BINARY incorrectly set X-Git-Tag: php-5.4.20RC1~30^2~5 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=98d29d20a1e5d2d8bc1699fbc61efde95f5ce87f;p=php Fixed #65225: PHP_BINARY incorrectly set --- diff --git a/main/main.c b/main/main.c index b639ab1658..1fd82c8398 100644 --- a/main/main.c +++ b/main/main.c @@ -115,6 +115,10 @@ #endif /* }}} */ +#ifndef S_ISREG +#define S_ISREG(mode) (((mode) & S_IFMT) == S_IFREG) +#endif + PHPAPI int (*php_register_internal_extensions_func)(TSRMLS_D) = php_register_internal_extensions; #ifndef ZTS @@ -276,13 +280,14 @@ static void php_binary_init(TSRMLS_D) if ((envpath = getenv("PATH")) != NULL) { char *search_dir, search_path[MAXPATHLEN]; char *last = NULL; + struct stat s; path = estrdup(envpath); search_dir = php_strtok_r(path, ":", &last); while (search_dir) { snprintf(search_path, MAXPATHLEN, "%s/%s", search_dir, sapi_module.executable_location); - if (VCWD_REALPATH(search_path, binary_location) && !VCWD_ACCESS(binary_location, X_OK)) { + if (VCWD_REALPATH(search_path, binary_location) && !VCWD_ACCESS(binary_location, X_OK) && VCWD_STAT(binary_location, &s) == 0 && S_ISREG(s.st_mode)) { found = 1; break; }