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