Kihaguru Gathura <pqscr...@gmail.com> writes:
> While testing to determine command line arguments passed to a cgi file > using the *function 1*, I receive the message *output 1.* > one argument is passed and that is the name of the file. > > However, testing with a bogus number 30 for argc in *function 2*, discloses > multiple arguments beyond the last null argument argv[1] see *output 2.* > There is also a null value at bogus argc number 29. > > Why are these additional argv values generated? haven't you gone out-of-bound and started printing the envp? > > > > *Function 1:* > > > > /**********************************************************************/ > > void TestCommandLineArguments(int argc, char *argv[]) > { > unsigned short int i = 0; > > if (argc == 1) /* if one command line argument is passed */ > { > PrintPageUpper(); > > while(i < argc) > { > printf("\t\t<p>(i = %2$d) argc: %1$d, \ > argv[%2$d]: \"%3$s\"</p>\n", argc, \ > i, argv[i]); > i++; > } > > PrintPageLower(); > exit(EXIT_SUCCESS); > > } > > if (argc != 1) > { > PrintPageUpper(); > puts("\t\t<p>(Multiple Arguments)</p>"); > PrintPageLower(); > exit(EXIT_SUCCESS); > } > } > > > /**********************************************************************/ > > > *Output 1: * > > <p>(i = 0) argc: 1, argv[0]: "//xyz/xyz.html"</p> > > > > > > > *Function 2:* > > > /**********************************************************************/ > > void TestCommandLineArguments(int argc, char *argv[]) > { > unsigned short int i = 0; > #define BOGUS_ARGC 30 > > if (argc == 1) > { > PrintPageUpper(); > > while(i < BOGUS_ARGC) > { > printf("\t\t<p>(i = %2$d) argc: %1$d, \ > argv[%2$d]: \"%3$s\"</p>\n", BOGUS_ARGC, \ > i, argv[i]); > i++; > } > > PrintPageLower(); > exit(EXIT_SUCCESS); > > } > > if (argc == 1) > { > PrintPageUpper(); > puts("\t\t<p>(Single Argument)</p>"); > PrintPageLower(); > exit(EXIT_SUCCESS); > } > } > > > /**********************************************************************/ > > *Output 2:* > > <p>(i = 0) argc: 30, argv[0]: > "//xyz/xyz.html"</p> > <p>(i = 1) argc: 30, argv[1]: > "(null)"</p> > <p>(i = 2) argc: 30, argv[2]: > "SERVER_SOFTWARE=OpenBSD httpd"</p> > <p>(i = 3) argc: 30, argv[3]: > "SERVER_PROTOCOL=HTTP/1.1"</p> > <p>(i = 4) argc: 30, argv[4]: > "SERVER_NAME=xyz.com"</p> > <p>(i = 5) argc: 30, argv[5]: > "SERVER_PORT=443"</p> > <p>(i = 6) argc: 30, argv[6]: > "SERVER_ADDR=xyz.xyz.xy.xyz"</p> > <p>(i = 7) argc: 30, argv[7]: > "REQUEST_URI=/xyz/xyz.html"</p> > <p>(i = 8) argc: 30, argv[8]: > "REQUEST_METHOD=GET"</p> > <p>(i = 9) argc: 30, argv[9]: > "REMOTE_PORT=36818"</p> > <p>(i = 10) argc: 30, argv[10]: > "REMOTE_ADDR=xyz.xyz.xy.xyz"</p> > <p>(i = 11) argc: 30, argv[11]: > "HTTPS=on"</p> > <p>(i = 12) argc: 30, argv[12]: > "HTTP_X_FORWARDED_FOR=xyz.xyz.xy.xyz"</p> > <p>(i = 13) argc: 30, argv[13]: > "HTTP_X_FORWARDED_BY=xyz.xyz.xy.xyz:8443"</p> > <p>(i = 14) argc: 30, argv[14]: > "HTTP_USER_AGENT=Mozilla/5.0 (X11; OpenBSD amd64; rv:62.0) > Gecko/20100101 Firefox/62.0"</p> > <p>(i = 15) argc: 30, argv[15]: > "HTTP_UPGRADE_INSECURE_REQUESTS=1"</p> > <p>(i = 16) argc: 30, argv[16]: > "HTTP_HOST=xyz.com"</p> > <p>(i = 17) argc: 30, argv[17]: > "HTTP_CONNECTION=keep-alive"</p> > <p>(i = 18) argc: 30, argv[18]: > "HTTP_CACHE_CONTROL=max-age=0"</p> > <p>(i = 19) argc: 30, argv[19]: > "HTTP_ACCEPT_LANGUAGE=en-US,en;q=0.5"</p> > <p>(i = 20) argc: 30, argv[20]: > "HTTP_ACCEPT_ENCODING=gzip, deflate, br"</p> > <p>(i = 21) argc: 30, argv[21]: > "HTTP_ACCEPT=text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"</p> > <p>(i = 22) argc: 30, argv[22]: > "GATEWAY_INTERFACE=CGI/1.1"</p> > <p>(i = 23) argc: 30, argv[23]: > "DOCUMENT_URI=/xyz/xyz.html"</p> > <p>(i = 24) argc: 30, argv[24]: > "DOCUMENT_ROOT=/"</p> > <p>(i = 25) argc: 30, argv[25]: > "QUERY_STRING="</p> > <p>(i = 26) argc: 30, argv[26]: > "SCRIPT_FILENAME=//xyz/xyz.html"</p> > <p>(i = 27) argc: 30, argv[27]: > "SCRIPT_NAME=/xyz/xyz.html"</p> > <p>(i = 28) argc: 30, argv[28]: > "PATH_INFO="</p> > <p>(i = 29) argc: 30, argv[29]: > "(null)"</p> > > Please note: the actual ip addresses and file names are hereby masked