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?




*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

Reply via email to