2121#include "php.h"
2222#include "php_globals.h"
2323#include "php_variables.h"
24+ #include "php_ini_builder.h"
2425#include "zend_hash.h"
2526#include "zend_modules.h"
2627#include "zend_interfaces.h"
@@ -131,7 +132,7 @@ const char HARDCODED_INI[] =
131132 "implicit_flush=1\n"
132133 "output_buffering=0\n"
133134 "max_execution_time=0\n"
134- "max_input_time=-1\n\0 " ;
135+ "max_input_time=-1\n" ;
135136
136137
137138const opt_struct OPTIONS [] = {
@@ -1176,8 +1177,7 @@ int main(int argc, char *argv[])
11761177 char * php_optarg = NULL ;
11771178 int php_optind = 1 , use_extended_info = 0 ;
11781179 char * ini_path_override = NULL ;
1179- char * ini_entries = NULL ;
1180- size_t ini_entries_len = 0 ;
1180+ struct php_ini_builder ini_builder ;
11811181 int ini_ignore = 0 ;
11821182 sapi_module_struct * sapi_module = & cli_sapi_module ;
11831183
@@ -1239,6 +1239,8 @@ int main(int argc, char *argv[])
12391239 setmode (_fileno (stderr ), O_BINARY ); /* make the stdio mode be binary */
12401240#endif
12411241
1242+ php_ini_builder_init (& ini_builder );
1243+
12421244 while ((c = php_getopt (argc , argv , OPTIONS , & php_optarg , & php_optind , 1 , 2 ))!= -1 ) {
12431245 switch (c ) {
12441246 case 'c' :
@@ -1250,37 +1252,10 @@ int main(int argc, char *argv[])
12501252 case 'n' :
12511253 ini_ignore = 1 ;
12521254 break ;
1253- case 'd' : {
1255+ case 'd' :
12541256 /* define ini entries on command line */
1255- size_t len = strlen (php_optarg );
1256- char * val ;
1257-
1258- if ((val = strchr (php_optarg , '=' ))) {
1259- val ++ ;
1260- if (!isalnum (* val ) && * val != '"' && * val != '\'' && * val != '\0' ) {
1261- ini_entries = realloc (ini_entries , ini_entries_len + len + sizeof ("\"\"\n\0" ));
1262- memcpy (ini_entries + ini_entries_len , php_optarg , (val - php_optarg ));
1263- ini_entries_len += (val - php_optarg );
1264- memcpy (ini_entries + ini_entries_len , "\"" , 1 );
1265- ini_entries_len ++ ;
1266- memcpy (ini_entries + ini_entries_len , val , len - (val - php_optarg ));
1267- ini_entries_len += len - (val - php_optarg );
1268- memcpy (ini_entries + ini_entries_len , "\"\n\0" , sizeof ("\"\n\0" ));
1269- ini_entries_len += sizeof ("\n\0\"" ) - 2 ;
1270- } else {
1271- ini_entries = realloc (ini_entries , ini_entries_len + len + sizeof ("\n\0" ));
1272- memcpy (ini_entries + ini_entries_len , php_optarg , len );
1273- memcpy (ini_entries + ini_entries_len + len , "\n\0" , sizeof ("\n\0" ));
1274- ini_entries_len += len + sizeof ("\n\0" ) - 2 ;
1275- }
1276- } else {
1277- ini_entries = realloc (ini_entries , ini_entries_len + len + sizeof ("=1\n\0" ));
1278- memcpy (ini_entries + ini_entries_len , php_optarg , len );
1279- memcpy (ini_entries + ini_entries_len + len , "=1\n\0" , sizeof ("=1\n\0" ));
1280- ini_entries_len += len + sizeof ("=1\n\0" ) - 2 ;
1281- }
1257+ php_ini_builder_define (& ini_builder , php_optarg );
12821258 break ;
1283- }
12841259#ifndef PHP_CLI_WIN32_NO_CONSOLE
12851260 case 'S' :
12861261 sapi_module = & cli_server_sapi_module ;
@@ -1317,18 +1292,10 @@ int main(int argc, char *argv[])
13171292 sapi_module -> executable_location = argv [0 ];
13181293
13191294 if (sapi_module == & cli_sapi_module ) {
1320- if (ini_entries ) {
1321- ini_entries = realloc (ini_entries , ini_entries_len + sizeof (HARDCODED_INI ));
1322- memmove (ini_entries + sizeof (HARDCODED_INI ) - 2 , ini_entries , ini_entries_len + 1 );
1323- memcpy (ini_entries , HARDCODED_INI , sizeof (HARDCODED_INI ) - 2 );
1324- } else {
1325- ini_entries = malloc (sizeof (HARDCODED_INI ));
1326- memcpy (ini_entries , HARDCODED_INI , sizeof (HARDCODED_INI ));
1327- }
1328- ini_entries_len += sizeof (HARDCODED_INI ) - 2 ;
1295+ php_ini_builder_prepend_literal (& ini_builder , HARDCODED_INI );
13291296 }
13301297
1331- sapi_module -> ini_entries = ini_entries ;
1298+ sapi_module -> ini_entries = php_ini_builder_finish ( & ini_builder ) ;
13321299
13331300 /* startup after we get the above ini override se we get things right */
13341301 if (sapi_module -> startup (sapi_module ) == FAILURE ) {
@@ -1375,9 +1342,7 @@ int main(int argc, char *argv[])
13751342 if (ini_path_override ) {
13761343 free (ini_path_override );
13771344 }
1378- if (ini_entries ) {
1379- free (ini_entries );
1380- }
1345+ php_ini_builder_deinit (& ini_builder );
13811346 if (module_started ) {
13821347 php_module_shutdown ();
13831348 }
0 commit comments