From: Marcus Boerger Date: Wed, 11 Feb 2004 22:00:38 +0000 (+0000) Subject: MFH: Bug #27104 CLI/CGI SAPI module variable name conflict X-Git-Tag: php-4.3.5RC3~24 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=69eaab8aac99397c874013c87534265fb50fe1a0;p=php MFH: Bug #27104 CLI/CGI SAPI module variable name conflict --- diff --git a/NEWS b/NEWS index d3cf70789d..2dc2171390 100644 --- a/NEWS +++ b/NEWS @@ -11,6 +11,7 @@ PHP 4 NEWS - Fixed bug #27171 (crash inside gmp_hamdist()). (Jani) - Fixed bug #27149 (broken CLOB support in oci8 extension). (Antony) - Fixed bug #27135 (Possible crash inside mb_strlen()). (Moriyoshi) +- Fixed bug #27104 (CLI/CGI SAPI module variable name conflict). (Marcus) - Fixed bug #27026 (Added "cgi.nph" php.ini option to allow forcing of the 'Status: 200' header that is not normally needed). (Ilia) - Fixed bug #26862 (ob_flush() followed by output_reset_rewrite_vars() may diff --git a/sapi/cgi/cgi_main.c b/sapi/cgi/cgi_main.c index c813ad5a7b..4bfbd75e58 100644 --- a/sapi/cgi/cgi_main.c +++ b/sapi/cgi/cgi_main.c @@ -119,8 +119,8 @@ static pid_t pgroup; #define PHP_MODE_LINT 4 #define PHP_MODE_STRIP 5 -static char *optarg = NULL; -static int optind = 1; +static char *php_optarg = NULL; +static int php_optind = 1; static const opt_struct OPTIONS[] = { {'a', 0, "interactive"}, @@ -960,8 +960,8 @@ int main(int argc, char *argv[]) /* temporary locals */ int behavior=PHP_MODE_STANDARD; int no_headers=0; - int orig_optind=optind; - char *orig_optarg=optarg; + int orig_optind=php_optind; + char *orig_optarg=php_optarg; char *script_file=NULL; zend_llist global_vars; int interactive=0; @@ -1039,10 +1039,10 @@ int main(int argc, char *argv[]) /* allow ini override for fastcgi */ #endif ) { - while ((c=php_getopt(argc, argv, OPTIONS, &optarg, &optind, 0))!=-1) { + while ((c=php_getopt(argc, argv, OPTIONS, &php_optarg, &php_optind, 0))!=-1) { switch (c) { case 'c': - cgi_sapi_module.php_ini_path_override = strdup(optarg); + cgi_sapi_module.php_ini_path_override = strdup(php_optarg); break; case 'n': cgi_sapi_module.php_ini_ignore = 1; @@ -1054,7 +1054,7 @@ int main(int argc, char *argv[]) server by accepting a bindpath parameter. */ case 'b': if (!fastcgi) { - bindpath = strdup(optarg); + bindpath = strdup(php_optarg); } break; #endif @@ -1062,8 +1062,8 @@ int main(int argc, char *argv[]) } } - optind = orig_optind; - optarg = orig_optarg; + php_optind = orig_optind; + php_optarg = orig_optarg; } #ifdef ZTS @@ -1269,7 +1269,7 @@ consult the installation file that came with this distribution, or visit \n\ && !fastcgi #endif ) { - while ((c=php_getopt(argc, argv, OPTIONS, &optarg, &optind, 1))!=-1) { + while ((c=php_getopt(argc, argv, OPTIONS, &php_optarg, &php_optind, 1))!=-1) { switch (c) { case 'h': case '?': @@ -1283,8 +1283,8 @@ consult the installation file that came with this distribution, or visit \n\ break; } } - optind = orig_optind; - optarg = orig_optarg; + php_optind = orig_optind; + php_optarg = orig_optarg; } #if PHP_FASTCGI @@ -1334,7 +1334,7 @@ consult the installation file that came with this distribution, or visit \n\ exit(1); } - while ((c = php_getopt(argc, argv, OPTIONS, &optarg, &optind, 0)) != -1) { + while ((c = php_getopt(argc, argv, OPTIONS, &php_optarg, &php_optind, 0)) != -1) { switch (c) { case 'a': /* interactive mode */ @@ -1346,7 +1346,7 @@ consult the installation file that came with this distribution, or visit \n\ SG(options) |= SAPI_OPTION_NO_CHDIR; break; case 'd': /* define ini entries on command line */ - define_command_line_ini_entry(optarg); + define_command_line_ini_entry(php_optarg); break; case 'e': /* enable extended info output */ @@ -1354,16 +1354,16 @@ consult the installation file that came with this distribution, or visit \n\ break; case 'f': /* parse file */ - script_file = estrdup(optarg); + script_file = estrdup(php_optarg); no_headers = 1; /* arguments after the file are considered script args */ - SG(request_info).argc = argc - (optind-1); - SG(request_info).argv = &argv[optind-1]; + SG(request_info).argc = argc - (php_optind-1); + SG(request_info).argv = &argv[php_optind-1]; break; case 'g': /* define global variables on command line */ { - char *arg = estrdup(optarg); + char *arg = estrdup(php_optarg); zend_llist_add_element(&global_vars, &arg); } @@ -1439,7 +1439,7 @@ consult the installation file that came with this distribution, or visit \n\ break; case 'z': /* load extension file */ - zend_load_extension(optarg); + zend_load_extension(php_optarg); break; default: @@ -1460,12 +1460,12 @@ consult the installation file that came with this distribution, or visit \n\ SG(request_info).no_headers = 1; } - if (!SG(request_info).path_translated && argc > optind) { + if (!SG(request_info).path_translated && argc > php_optind) { /* arguments after the file are considered script args */ - SG(request_info).argc = argc - optind; - SG(request_info).argv = &argv[optind]; + SG(request_info).argc = argc - php_optind; + SG(request_info).argv = &argv[php_optind]; /* file is on command line, but not in -f opt */ - SG(request_info).path_translated = estrdup(argv[optind++]); + SG(request_info).path_translated = estrdup(argv[php_optind++]); } /* all remaining arguments are part of the query string @@ -1477,15 +1477,15 @@ consult the installation file that came with this distribution, or visit \n\ test.php "v1=test&v2=hello world!" test.php v1=test "v2=hello world!" */ - if (!SG(request_info).query_string && argc > optind) { + if (!SG(request_info).query_string && argc > php_optind) { len = 0; - for (i = optind; i < argc; i++) { + for (i = php_optind; i < argc; i++) { len += strlen(argv[i]) + 1; } s = malloc(len + 1); /* leak - but only for command line version, so ok */ *s = '\0'; /* we are pretending it came from the environment */ - for (i = optind, len = 0; i < argc; i++) { + for (i = php_optind, len = 0; i < argc; i++) { strcat(s, argv[i]); if (i < (argc - 1)) { strcat(s, PG(arg_separator).input); diff --git a/sapi/cli/php_cli.c b/sapi/cli/php_cli.c index 8ec290bcea..f0c721c350 100644 --- a/sapi/cli/php_cli.c +++ b/sapi/cli/php_cli.c @@ -91,8 +91,8 @@ #define PHP_MODE_STRIP 5 #define PHP_MODE_CLI_DIRECT 6 -static char *optarg = NULL; -static int optind = 1; +static char *php_optarg = NULL; +static int php_optind = 1; static const opt_struct OPTIONS[] = { {'a', 0, "interactive"}, @@ -500,8 +500,8 @@ int main(int argc, char *argv[]) zend_file_handle file_handle; /* temporary locals */ int behavior=PHP_MODE_STANDARD; - int orig_optind=optind; - char *orig_optarg=optarg; + int orig_optind=php_optind; + char *orig_optarg=php_optarg; char *arg_free=NULL, **arg_excp=&arg_free; char *script_file=NULL; zend_llist global_vars; @@ -549,18 +549,18 @@ int main(int argc, char *argv[]) #endif - while ((c = php_getopt(argc, argv, OPTIONS, &optarg, &optind, 0))!=-1) { + while ((c = php_getopt(argc, argv, OPTIONS, &php_optarg, &php_optind, 0))!=-1) { switch (c) { case 'c': - cli_sapi_module.php_ini_path_override = strdup(optarg); + cli_sapi_module.php_ini_path_override = strdup(php_optarg); break; case 'n': cli_sapi_module.php_ini_ignore = 1; break; } } - optind = orig_optind; - optarg = orig_optarg; + php_optind = orig_optind; + php_optarg = orig_optarg; cli_sapi_module.executable_location = argv[0]; @@ -604,11 +604,11 @@ int main(int argc, char *argv[]) INI_HARDCODED("output_buffering", "0"); INI_HARDCODED("max_execution_time", "0"); - while ((c = php_getopt(argc, argv, OPTIONS, &optarg, &optind, 0)) != -1) { + while ((c = php_getopt(argc, argv, OPTIONS, &php_optarg, &php_optind, 0)) != -1) { switch (c) { case 'd': /* define ini entries on command line */ - define_command_line_ini_entry(optarg); + define_command_line_ini_entry(php_optarg); break; case 'h': /* help & quit */ @@ -663,9 +663,9 @@ int main(int argc, char *argv[]) /* Set some CLI defaults */ SG(options) |= SAPI_OPTION_NO_CHDIR; - optind = orig_optind; - optarg = orig_optarg; - while ((c = php_getopt(argc, argv, OPTIONS, &optarg, &optind, 0)) != -1) { + php_optind = orig_optind; + php_optarg = orig_optarg; + while ((c = php_getopt(argc, argv, OPTIONS, &php_optarg, &php_optind, 0)) != -1) { switch (c) { case 'a': /* interactive mode */ @@ -686,12 +686,12 @@ int main(int argc, char *argv[]) param_error = "Either execute direct code or use a file.\n"; break; } - script_file = optarg; + script_file = php_optarg; break; case 'g': /* define global variables on command line */ { - char *arg = estrdup(optarg); + char *arg = estrdup(php_optarg); zend_llist_add_element(&global_vars, &arg); } @@ -724,7 +724,7 @@ int main(int argc, char *argv[]) break; } behavior=PHP_MODE_CLI_DIRECT; - exec_direct=optarg; + exec_direct=php_optarg; break; case 's': /* generate highlighted HTML from source */ @@ -744,7 +744,7 @@ int main(int argc, char *argv[]) break; case 'z': /* load extension file */ - zend_load_extension(optarg); + zend_load_extension(php_optarg); break; case 'H': hide_argv = 1; @@ -764,9 +764,9 @@ int main(int argc, char *argv[]) CG(interactive) = interactive; /* only set script_file if not set already and not in direct mode and not at end of parameter list */ - if (argc > optind && !script_file && behavior!=PHP_MODE_CLI_DIRECT && strcmp(argv[optind-1],"--")) { - script_file=argv[optind]; - optind++; + if (argc > php_optind && !script_file && behavior!=PHP_MODE_CLI_DIRECT && strcmp(argv[php_optind-1],"--")) { + script_file=argv[php_optind]; + php_optind++; } if (script_file) { if (cli_seek_file_begin(&file_handle, script_file, &lineno TSRMLS_CC) != SUCCESS) { @@ -785,12 +785,12 @@ int main(int argc, char *argv[]) /* before registering argv to module exchange the *new* argv[0] */ /* we can achieve this without allocating more memory */ - SG(request_info).argc=argc-optind+1; - arg_excp = argv+optind-1; - arg_free = argv[optind-1]; + SG(request_info).argc=argc-php_optind+1; + arg_excp = argv+php_optind-1; + arg_free = argv[php_optind-1]; SG(request_info).path_translated = file_handle.filename; - argv[optind-1] = file_handle.filename; - SG(request_info).argv=argv+optind-1; + argv[php_optind-1] = file_handle.filename; + SG(request_info).argv=argv+php_optind-1; if (php_request_startup(TSRMLS_C)==FAILURE) { *arg_excp = arg_free;