[PHP-CVS] svn: /php/php-src/ branches/PHP_5_3/main/php_ini.c trunk/main/php_ini.c
pajoye Wed, 19 Jan 2011 14:21:46 + Revision: http://svn.php.net/viewvc?view=revision&revision=307587 Log: - path len check and fix buffer overrun Changed paths: U php/php-src/branches/PHP_5_3/main/php_ini.c U php/php-src/trunk/main/php_ini.c Modified: php/php-src/branches/PHP_5_3/main/php_ini.c === --- php/php-src/branches/PHP_5_3/main/php_ini.c 2011-01-19 14:07:37 UTC (rev 307586) +++ php/php-src/branches/PHP_5_3/main/php_ini.c 2011-01-19 14:21:46 UTC (rev 307587) @@ -824,12 +824,15 @@ #if PHP_WIN32 char path_bak[MAXPATHLEN]; +#endif if (path_len > MAXPATHLEN) { return; } + +#if PHP_WIN32 memcpy(path_bak, path, path_len); - path_bak[path_len] = 0; + path_bak[path_len - 1] = 0; TRANSLATE_SLASHES_LOWER(path_bak); path = path_bak; #endif Modified: php/php-src/trunk/main/php_ini.c === --- php/php-src/trunk/main/php_ini.c2011-01-19 14:07:37 UTC (rev 307586) +++ php/php-src/trunk/main/php_ini.c2011-01-19 14:21:46 UTC (rev 307587) @@ -820,12 +820,15 @@ #if PHP_WIN32 char path_bak[MAXPATHLEN]; +#endif if (path_len > MAXPATHLEN) { return; } + +#if PHP_WIN32 memcpy(path_bak, path, path_len); - path_bak[path_len] = 0; + path_bak[path_len - 1] = 0; TRANSLATE_SLASHES_LOWER(path_bak); path = path_bak; #endif -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] svn: /php/php-src/ branches/PHP_5_3/main/php_ini.c trunk/main/php_ini.c
pajoye Mon, 17 Jan 2011 14:29:16 + Revision: http://svn.php.net/viewvc?view=revision&revision=307541 Log: - path len sanity check Changed paths: U php/php-src/branches/PHP_5_3/main/php_ini.c U php/php-src/trunk/main/php_ini.c Modified: php/php-src/branches/PHP_5_3/main/php_ini.c === --- php/php-src/branches/PHP_5_3/main/php_ini.c 2011-01-17 14:23:57 UTC (rev 307540) +++ php/php-src/branches/PHP_5_3/main/php_ini.c 2011-01-17 14:29:16 UTC (rev 307541) @@ -824,6 +824,10 @@ #if PHP_WIN32 char path_bak[MAXPATHLEN]; + + if (path_len > MAXPATHLEN) { + return; + } memcpy(path_bak, path, path_len); path_bak[path_len] = 0; TRANSLATE_SLASHES_LOWER(path_bak); Modified: php/php-src/trunk/main/php_ini.c === --- php/php-src/trunk/main/php_ini.c2011-01-17 14:23:57 UTC (rev 307540) +++ php/php-src/trunk/main/php_ini.c2011-01-17 14:29:16 UTC (rev 307541) @@ -820,6 +820,10 @@ #if PHP_WIN32 char path_bak[MAXPATHLEN]; + + if (path_len > MAXPATHLEN) { + return; + } memcpy(path_bak, path, path_len); path_bak[path_len] = 0; TRANSLATE_SLASHES_LOWER(path_bak); -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] svn: /php/php-src/ branches/PHP_5_3/main/php_ini.c trunk/main/php_ini.c
pajoye Mon, 10 Jan 2011 08:28:47 + Revision: http://svn.php.net/viewvc?view=revision&revision=307330 Log: - remove local redeclaration Changed paths: U php/php-src/branches/PHP_5_3/main/php_ini.c U php/php-src/trunk/main/php_ini.c Modified: php/php-src/branches/PHP_5_3/main/php_ini.c === --- php/php-src/branches/PHP_5_3/main/php_ini.c 2011-01-10 08:07:38 UTC (rev 307329) +++ php/php-src/branches/PHP_5_3/main/php_ini.c 2011-01-10 08:28:47 UTC (rev 307330) @@ -650,14 +650,14 @@ struct stat sb; char ini_file[MAXPATHLEN]; char *p; - zend_file_handle fh; + zend_file_handle fh2; zend_llist scanned_ini_list; zend_llist_element *element; int l, total_l = 0; 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(&fh, 0, sizeof(fh)); + memset(&fh2, 0, sizeof(fh2)); for (i = 0; i < ndir; i++) { @@ -676,11 +676,11 @@ } if (VCWD_STAT(ini_file, &sb) == 0) { if (S_ISREG(sb.st_mode)) { - if ((fh.handle.fp = VCWD_FOPEN(ini_file, "r"))) { - fh.filename = ini_file; - fh.type = ZEND_HANDLE_FP; + if ((fh2.handle.fp = VCWD_FOPEN(ini_file, "r"))) { + fh2.filename = ini_file; + fh2.type = ZEND_HANDLE_FP; - if (zend_parse_ini_file(&fh, 1, ZEND_INI_SCANNER_NORMAL, (zend_ini_parser_cb_t) php_ini_parser_cb, &configuration_hash TSRMLS_CC) == SUCCESS) { + if (zend_parse_ini_file(&fh2, 1, ZEND_INI_SCANNER_NORMAL, (zend_ini_parser_cb_t) php_ini_parser_cb, &configuration_hash TSRMLS_CC) == SUCCESS) { /* Here, add it to the list of ini files read */ l = strlen(ini_file); total_l += l + 2; @@ -819,7 +819,7 @@ */ PHPAPI void php_ini_activate_per_dir_config(char *path, uint path_len TSRMLS_DC) { - zval *tmp; + zval *tmp2; char *ptr; #if PHP_WIN32 @@ -836,8 +836,8 @@ while ((ptr = strchr(ptr, '/')) != NULL) { *ptr = 0; /* Search for source array matching the path from configuration_hash */ - if (zend_hash_find(&configuration_hash, path, strlen(path) + 1, (void **) &tmp) == SUCCESS) { - php_ini_activate_config(Z_ARRVAL_P(tmp), PHP_INI_SYSTEM, PHP_INI_STAGE_ACTIVATE TSRMLS_CC); + if (zend_hash_find(&configuration_hash, path, strlen(path) + 1, (void **) &tmp2) == SUCCESS) { + php_ini_activate_config(Z_ARRVAL_P(tmp2), PHP_INI_SYSTEM, PHP_INI_STAGE_ACTIVATE TSRMLS_CC); } *ptr = '/'; ptr++; Modified: php/php-src/trunk/main/php_ini.c === --- php/php-src/trunk/main/php_ini.c2011-01-10 08:07:38 UTC (rev 307329) +++ php/php-src/trunk/main/php_ini.c2011-01-10 08:28:47 UTC (rev 307330) @@ -646,14 +646,14 @@ struct stat sb; char ini_file[MAXPATHLEN]; char *p; - zend_file_handle fh; + zend_file_handle fh2; zend_llist scanned_ini_list; zend_llist_element *element; int l, total_l = 0; 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(&fh, 0, sizeof(fh)); + memset(&fh2, 0, sizeof(fh2)); for (i = 0; i < ndir; i++) { @@ -672,11 +672,11 @@ } if (VCWD_STAT(ini_file, &sb) == 0) { if (S_ISREG(sb.st_mode)) { - if ((fh.handle.fp = VCWD_FOPEN(ini_file, "r"))) { - fh.filename = ini_file
[PHP-CVS] svn: /php/php-src/ branches/PHP_5_3/main/php_ini.c trunk/main/php_ini.c
felipe Mon, 30 Aug 2010 21:34:54 + Revision: http://svn.php.net/viewvc?view=revision&revision=302903 Log: - Fixed crash on non-Windows build Changed paths: U php/php-src/branches/PHP_5_3/main/php_ini.c U php/php-src/trunk/main/php_ini.c Modified: php/php-src/branches/PHP_5_3/main/php_ini.c === --- php/php-src/branches/PHP_5_3/main/php_ini.c 2010-08-30 18:13:28 UTC (rev 302902) +++ php/php-src/branches/PHP_5_3/main/php_ini.c 2010-08-30 21:34:54 UTC (rev 302903) @@ -426,6 +426,10 @@ } } } +#else + if (!env_location) { + env_location = ""; + } #endif /* * Prepare search path Modified: php/php-src/trunk/main/php_ini.c === --- php/php-src/trunk/main/php_ini.c2010-08-30 18:13:28 UTC (rev 302902) +++ php/php-src/trunk/main/php_ini.c2010-08-30 21:34:54 UTC (rev 302903) @@ -424,6 +424,10 @@ } } } +#else + if (!env_location) { + env_location = ""; + } #endif /* * Prepare search path -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] svn: /php/php-src/ branches/PHP_5_3/main/php_ini.c trunk/main/php_ini.c
pajoye Mon, 30 Aug 2010 17:05:56 + Revision: http://svn.php.net/viewvc?view=revision&revision=302899 Log: - fix possible leak and error while fetching PHPRC Changed paths: U php/php-src/branches/PHP_5_3/main/php_ini.c U php/php-src/trunk/main/php_ini.c Modified: php/php-src/branches/PHP_5_3/main/php_ini.c === --- php/php-src/branches/PHP_5_3/main/php_ini.c 2010-08-30 17:01:36 UTC (rev 302898) +++ php/php-src/branches/PHP_5_3/main/php_ini.c 2010-08-30 17:05:56 UTC (rev 302899) @@ -398,13 +398,35 @@ static const char paths_separator[] = { ZEND_PATHS_SEPARATOR, 0 }; #ifdef PHP_WIN32 char *reg_location; + char phprc_path[MAXPATHLEN]; #endif env_location = getenv("PHPRC"); + +#ifdef PHP_WIN32 if (!env_location) { - env_location = ""; + char dummybuf; + int size; + + SetLastError(0); + + /*If the given bugger is not large enough to hold the data, the return value is + the buffer size, in characters, required to hold the string and its terminating + null character. We use this return value to alloc the final buffer. */ + size = GetEnvironmentVariableA("PHPRC", &dummybuf, 0); + if (GetLastError() == ERROR_ENVVAR_NOT_FOUND) { + /* The environment variable doesn't exist. */ + env_location = ""; + } else { + if (size == 0) { + env_location = ""; + } else { + size = GetEnvironmentVariableA("PHPRC", phprc_path, size); + env_location = phprc_path; + } + } } - +#endif /* * Prepare search path */ Modified: php/php-src/trunk/main/php_ini.c === --- php/php-src/trunk/main/php_ini.c2010-08-30 17:01:36 UTC (rev 302898) +++ php/php-src/trunk/main/php_ini.c2010-08-30 17:05:56 UTC (rev 302899) @@ -396,13 +396,35 @@ static const char paths_separator[] = { ZEND_PATHS_SEPARATOR, 0 }; #ifdef PHP_WIN32 char *reg_location; + char phprc_path[MAXPATHLEN]; #endif env_location = getenv("PHPRC"); + +#ifdef PHP_WIN32 if (!env_location) { - env_location = ""; + char dummybuf; + int size; + + SetLastError(0); + + /*If the given bugger is not large enough to hold the data, the return value is + the buffer size, in characters, required to hold the string and its terminating + null character. We use this return value to alloc the final buffer. */ + size = GetEnvironmentVariableA("PHPRC", &dummybuf, 0); + if (GetLastError() == ERROR_ENVVAR_NOT_FOUND) { + /* The environment variable doesn't exist. */ + env_location = ""; + } else { + if (size == 0) { + env_location = ""; + } else { + size = GetEnvironmentVariableA("PHPRC", phprc_path, size); + env_location = phprc_path; + } + } } - +#endif /* * Prepare search path */ -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] svn: /php/php-src/ branches/PHP_5_3/main/php_ini.c trunk/main/php_ini.c
pajoye Sun, 11 Oct 2009 21:04:35 + Revision: http://svn.php.net/viewvc?view=revision&revision=289547 Log: - fix possible issue in TS environment (we don't have to do that anymore anyway in 5.3+) Changed paths: U php/php-src/branches/PHP_5_3/main/php_ini.c U php/php-src/trunk/main/php_ini.c Modified: php/php-src/branches/PHP_5_3/main/php_ini.c === --- php/php-src/branches/PHP_5_3/main/php_ini.c 2009-10-11 20:50:53 UTC (rev 289546) +++ php/php-src/branches/PHP_5_3/main/php_ini.c 2009-10-11 21:04:35 UTC (rev 289547) @@ -507,33 +507,18 @@ } strlcat(php_ini_search_path, default_location, search_path_size); } - efree(default_location); - { - /* For people running under terminal services, GetWindowsDirectory will -* return their personal Windows directory, so lets add the system -* windows directory too */ - typedef UINT (WINAPI *get_system_windows_directory_func)(char *buffer, UINT size); - static get_system_windows_directory_func get_system_windows_directory = NULL; - HMODULE kern; - - if (get_system_windows_directory == NULL) { - kern = LoadLibrary("kernel32.dll"); - if (kern) { - get_system_windows_directory = (get_system_windows_directory_func)GetProcAddress(kern, "GetSystemWindowsDirectoryA"); - } + /* For people running under terminal services, GetWindowsDirectory will +* return their personal Windows directory, so lets add the system +* windows directory too */ + if (0 < GetSystemWindowsDirectory(default_location, MAXPATHLEN)) { + if (*php_ini_search_path) { + strlcat(php_ini_search_path, paths_separator, search_path_size); } - if (get_system_windows_directory != NULL) { - default_location = (char *) emalloc(MAXPATHLEN + 1); - if (0 < get_system_windows_directory(default_location, MAXPATHLEN)) { - if (*php_ini_search_path) { - strlcat(php_ini_search_path, paths_separator, search_path_size); - } - strlcat(php_ini_search_path, default_location, search_path_size); - } - efree(default_location); - } + strlcat(php_ini_search_path, default_location, search_path_size); } + efree(default_location); + #else default_location = PHP_CONFIG_FILE_PATH; if (*php_ini_search_path) { Modified: php/php-src/trunk/main/php_ini.c === --- php/php-src/trunk/main/php_ini.c2009-10-11 20:50:53 UTC (rev 289546) +++ php/php-src/trunk/main/php_ini.c2009-10-11 21:04:35 UTC (rev 289547) @@ -505,33 +505,18 @@ } strlcat(php_ini_search_path, default_location, search_path_size); } - efree(default_location); - { - /* For people running under terminal services, GetWindowsDirectory will -* return their personal Windows directory, so lets add the system -* windows directory too */ - typedef UINT (WINAPI *get_system_windows_directory_func)(char *buffer, UINT size); - static get_system_windows_directory_func get_system_windows_directory = NULL; - HMODULE kern; - - if (get_system_windows_directory == NULL) { - kern = LoadLibrary("kernel32.dll"); - if (kern) { - get_system_windows_directory = (get_system_windows_directory_func)GetProcAddress(kern, "GetSystemWindowsDirectoryA"); - } + /* For people running under terminal services, GetWindowsDirectory will +* return their personal Windows directory, so lets add the system +* windows directory too */ + if (0 < GetSystemWindowsDirectory(default_location, MAXPATHLEN)) { + if (*php_ini_search_path) { + strlcat(php_ini_search_path, paths_separator, search_path_size); } -
[PHP-CVS] svn: /php/php-src/ branches/PHP_5_3/main/php_ini.c trunk/main/php_ini.c
pajoye Sun, 11 Oct 2009 20:50:53 + Revision: http://svn.php.net/viewvc?view=revision&revision=289546 Log: - #48779, don't loop twice over the path chars Bug: http://bugs.php.net/48779 (Open) Use of HOST section cause 500 error Changed paths: U php/php-src/branches/PHP_5_3/main/php_ini.c U php/php-src/trunk/main/php_ini.c Modified: php/php-src/branches/PHP_5_3/main/php_ini.c === --- php/php-src/branches/PHP_5_3/main/php_ini.c 2009-10-11 20:14:47 UTC (rev 289545) +++ php/php-src/branches/PHP_5_3/main/php_ini.c 2009-10-11 20:50:53 UTC (rev 289546) @@ -42,16 +42,17 @@ #endif #ifdef PHP_WIN32 -#define TRANSLATE_SLASHES(path) \ +#define TRANSLATE_SLASHES_LOWER(path) \ { \ char *tmp = path; \ while (*tmp) { \ if (*tmp == '\\') *tmp = '/'; \ - tmp++; \ + else *tmp = (__isascii(*tmp)) ? _tolower(*tmp) : tolower(*tmp); \ + tmp++; \ } \ } #else -#define TRANSLATE_SLASHES(path) +#define TRANSLATE_SLASHES_LOWER(path) #endif @@ -287,12 +288,9 @@ key_len = Z_STRLEN_P(arg1) - sizeof("PATH") + 1; is_special_section = 1; has_per_dir_config = 1; -#ifdef PHP_WIN32 - /* make the path lowercase on Windows, for case insensitivty. */ - strlwr(key); - TRANSLATE_SLASHES(key); -#endif + /* make the path lowercase on Windows, for case insensitivty. Does nothign for other platforms */ + TRANSLATE_SLASHES_LOWER(key); /* HOST sections */ } else if (!strncasecmp(Z_STRVAL_P(arg1), "HOST", sizeof("HOST") - 1)) { Modified: php/php-src/trunk/main/php_ini.c === --- php/php-src/trunk/main/php_ini.c2009-10-11 20:14:47 UTC (rev 289545) +++ php/php-src/trunk/main/php_ini.c2009-10-11 20:50:53 UTC (rev 289546) @@ -42,16 +42,17 @@ #endif #ifdef PHP_WIN32 -#define TRANSLATE_SLASHES(path) \ +#define TRANSLATE_SLASHES_LOWER(path) \ { \ char *tmp = path; \ while (*tmp) { \ if (*tmp == '\\') *tmp = '/'; \ - tmp++; \ + else *tmp = (__isascii(*tmp)) ? _tolower(*tmp) : tolower(*tmp); \ + tmp++; \ } \ } #else -#define TRANSLATE_SLASHES(path) +#define TRANSLATE_SLASHES_LOWER(path) #endif @@ -287,12 +288,9 @@ key_len = Z_STRLEN_P(arg1) - sizeof("PATH") + 1; is_special_section = 1; has_per_dir_config = 1; -#ifdef PHP_WIN32 - /* make the path lowercase on Windows, for case insensitivty. */ - strlwr(key); - TRANSLATE_SLASHES(key); -#endif + /* make the path lowercase on Windows, for case insensitivty. Does nothign for other platforms */ + TRANSLATE_SLASHES_LOWER(key); /* HOST sections */ } else if (!strncasecmp(Z_STRVAL_P(arg1), "HOST", sizeof("HOST") - 1)) { -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php