php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login

Patch iniscan-multipath-strip.patch for PHP options/info functions Bug #66574

Patch version 2014-01-25 08:26 UTC

Return to Bug #66574 | Download this patch
Patch Revisions:

Developer: remi@php.net

--- main/php_ini.c.old	2014-01-25 09:09:45.708028594 +0100
+++ main/php_ini.c	2014-01-25 09:11:59.144505943 +0100
@@ -630,11 +630,27 @@
 		zend_llist scanned_ini_list;
 		zend_llist_element *element;
 		int l, total_l = 0;
+		char *bufpath, *debpath, *endpath;
+		int lenpath;
 
-		if ((ndir = php_scandir(php_ini_scanned_path, &namelist, 0, php_alphasort)) > 0) {
 			zend_llist_init(&scanned_ini_list, sizeof(char *), (llist_dtor_func_t) free_estring, 1);
 			memset(&fh2, 0, sizeof(fh2));
 
+		bufpath =estrdup(php_ini_scanned_path);
+		for (debpath = bufpath ; debpath ; debpath=endpath) {
+			endpath = strchr(debpath, DEFAULT_DIR_SEPARATOR);
+			if (endpath) {
+				*(endpath++) = 0;
+			}
+			if (!debpath[0]) {
+				/* empty string means default builtin value
+				   to allow "/foo/phd.d:" or ":/foo/php.d" */
+				debpath = PHP_CONFIG_FILE_SCAN_DIR;
+			}
+			lenpath = strlen(debpath);
+
+			if (lenpath > 0 && (ndir = php_scandir(debpath, &namelist, 0, php_alphasort)) > 0) {
+
 			for (i = 0; i < ndir; i++) {
 
 				/* check for any file with .ini extension */
@@ -645,10 +661,10 @@
 				/* Reset active ini section */
 				RESET_ACTIVE_INI_HASH();
 
-				if (IS_SLASH(php_ini_scanned_path[php_ini_scanned_path_len - 1])) {
-					snprintf(ini_file, MAXPATHLEN, "%s%s", php_ini_scanned_path, namelist[i]->d_name);
+					if (IS_SLASH(debpath[lenpath - 1])) {
+						snprintf(ini_file, MAXPATHLEN, "%s%s", debpath, namelist[i]->d_name);
 				} else {
-					snprintf(ini_file, MAXPATHLEN, "%s%c%s", php_ini_scanned_path, DEFAULT_SLASH, namelist[i]->d_name);
+						snprintf(ini_file, MAXPATHLEN, "%s%c%s", debpath, DEFAULT_SLASH, namelist[i]->d_name);
 				}
 				if (VCWD_STAT(ini_file, &sb) == 0) {
 					if (S_ISREG(sb.st_mode)) {
@@ -669,6 +685,9 @@
 				free(namelist[i]);
 			}
 			free(namelist);
+			}
+		}
+		efree(bufpath);
 
 			if (total_l) {
 				int php_ini_scanned_files_len = (php_ini_scanned_files) ? strlen(php_ini_scanned_files) + 1 : 0;
@@ -686,7 +705,6 @@
 				}
 			}
 			zend_llist_destroy(&scanned_ini_list);
-		}
 	} else {
 		/* Make sure an empty php_ini_scanned_path ends up as NULL */
 		php_ini_scanned_path = NULL;
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Sat May 04 06:01:35 2024 UTC