]> granicus.if.org Git - php/commitdiff
- fix possible leak and error while fetching PHPRC
authorPierre Joye <pajoye@php.net>
Mon, 30 Aug 2010 17:05:56 +0000 (17:05 +0000)
committerPierre Joye <pajoye@php.net>
Mon, 30 Aug 2010 17:05:56 +0000 (17:05 +0000)
main/php_ini.c

index 42710418c61b96931bb214a19e2d847dc69c5433..dfe312f446b9e69cb859c6a5feff1ad17734b394 100644 (file)
@@ -396,13 +396,35 @@ int php_init_config(TSRMLS_D)
                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
                 */