You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by xi...@apache.org on 2021/04/04 16:45:34 UTC
[incubator-nuttx-apps] branch master updated: testing/ostest: More
improvements to getopt() testing/ostest
This is an automated email from the ASF dual-hosted git repository.
xiaoxiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-nuttx-apps.git
The following commit(s) were added to refs/heads/master by this push:
new 6a67904 testing/ostest: More improvements to getopt() testing/ostest
6a67904 is described below
commit 6a679043e63e66571e6e363a5d5dcd5af3fce1ce
Author: Gregory Nutt <gn...@nuttx.org>
AuthorDate: Sun Apr 4 09:53:45 2021 -0600
testing/ostest: More improvements to getopt() testing/ostest
Fix optind range checking. optind may index through argc (to the NULL argv entry) on the last option since optind is required to always point to the next command line argument.
Add two more test cases were the final thing on the command line is an invalid long option.
Fix a check that used an older, obsoleted hard-coded value that was not updated.
This should have no impact other than to the getopt() test cases of the OS test.
Tested on the simulator using a modified NSH configuration.
---
testing/ostest/getopt.c | 25 ++++++++++++++++++++++---
1 file changed, 22 insertions(+), 3 deletions(-)
diff --git a/testing/ostest/getopt.c b/testing/ostest/getopt.c
index 36898c2..1c76799 100644
--- a/testing/ostest/getopt.c
+++ b/testing/ostest/getopt.c
@@ -192,7 +192,11 @@ static int getopt_short_test(int noptions, int argc, FAR char **argv,
(ret = getopt(argc, argv, optstring)) != ERROR && ndx < noptions;
ndx++)
{
- if (optind < 1 || optind >= argc)
+ /* optind may index through argc (to the NULL argv entry) since it is
+ * required to always point to the next command line argument.
+ */
+
+ if (optind < 1 || optind > argc)
{
printf("ERROR: optind=%d\n", optind);
}
@@ -250,7 +254,11 @@ static int getopt_long_test(int noptions, int argc, FAR char **argv,
longindex)) != ERROR;
ndx++)
{
- if (optind < 1 || optind >= argc)
+ /* optind may index through argc (to the NULL argv entry) since it is
+ * required to always point to the next command line argument.
+ */
+
+ if (optind < 1 || optind > argc)
{
printf("ERROR: optind=%d\n", optind);
}
@@ -315,7 +323,11 @@ static int getopt_longonly_test(int noptions, int argc, FAR char **argv,
longindex)) != ERROR;
ndx++)
{
- if (optind < 1 || optind > 7)
+ /* optind may index through argc (to the NULL argv entry) since it is
+ * required to always point to the next command line argument.
+ */
+
+ if (optind < 1 || optind > argc)
{
printf("ERROR: optind=%d\n", optind);
}
@@ -413,6 +425,9 @@ int getopt_test(void)
getopt_short_test(5, 9, argv, g_optstring, results);
+ argv[8] = NULL;
+ getopt_short_test(5, 8, argv, g_optstring, results);
+
printf("getopt(): Missing optional argument\n");
argv[0] = NULL;
@@ -490,6 +505,10 @@ int getopt_test(void)
getopt_long_test(5, 9, argv, g_optstring, long_options, NULL,
results);
+ argv[8] = NULL;
+ getopt_long_test(5, 8, argv, g_optstring, long_options, NULL,
+ results);
+
printf("getopt_long(): Mixed long and short options\n");
argv[0] = NULL;