From 4c4f10634498e57cbc672835c25a92896b49075d Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Fri, 27 May 2005 18:30:34 +0000 Subject: [PATCH] =?utf8?q?Return=20an=20error=20if=20an=20option=20is=20mi?= =?utf8?q?ssing=20its=20argument.=20(#305576,=20Bj=C3=B6rn?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 2005-05-27 Matthias Clasen * glib/goption.c (parse_short_option, parse_long_option): Return an error if an option is missing its argument. (#305576, Björn Lindqvist) * tests/option-test.c (missing_arg_test): Add a testcase. --- ChangeLog | 8 ++++++++ ChangeLog.pre-2-10 | 8 ++++++++ ChangeLog.pre-2-12 | 8 ++++++++ ChangeLog.pre-2-8 | 8 ++++++++ glib/goption.c | 22 ++++++++++++++++------ tests/option-test.c | 38 ++++++++++++++++++++++++++++++++++++++ 6 files changed, 86 insertions(+), 6 deletions(-) diff --git a/ChangeLog b/ChangeLog index 5610d08..30ba5c9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2005-05-27 Matthias Clasen + + * glib/goption.c (parse_short_option, parse_long_option): + Return an error if an option is missing its argument. (#305576, + Björn Lindqvist) + + * tests/option-test.c (missing_arg_test): Add a testcase. + Wed May 25 15:33:51 2005 Manish Singh * glib/goption.c (print_help): rest_description should be const. diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index 5610d08..30ba5c9 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,11 @@ +2005-05-27 Matthias Clasen + + * glib/goption.c (parse_short_option, parse_long_option): + Return an error if an option is missing its argument. (#305576, + Björn Lindqvist) + + * tests/option-test.c (missing_arg_test): Add a testcase. + Wed May 25 15:33:51 2005 Manish Singh * glib/goption.c (print_help): rest_description should be const. diff --git a/ChangeLog.pre-2-12 b/ChangeLog.pre-2-12 index 5610d08..30ba5c9 100644 --- a/ChangeLog.pre-2-12 +++ b/ChangeLog.pre-2-12 @@ -1,3 +1,11 @@ +2005-05-27 Matthias Clasen + + * glib/goption.c (parse_short_option, parse_long_option): + Return an error if an option is missing its argument. (#305576, + Björn Lindqvist) + + * tests/option-test.c (missing_arg_test): Add a testcase. + Wed May 25 15:33:51 2005 Manish Singh * glib/goption.c (print_help): rest_description should be const. diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index 5610d08..30ba5c9 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,11 @@ +2005-05-27 Matthias Clasen + + * glib/goption.c (parse_short_option, parse_long_option): + Return an error if an option is missing its argument. (#305576, + Björn Lindqvist) + + * tests/option-test.c (missing_arg_test): Add a testcase. + Wed May 25 15:33:51 2005 Manish Singh * glib/goption.c (print_help): rest_description should be const. diff --git a/glib/goption.c b/glib/goption.c index 8fdbdd9..4cfd459 100644 --- a/glib/goption.c +++ b/glib/goption.c @@ -907,8 +907,13 @@ parse_short_option (GOptionContext *context, *new_index = index + 1; } else - value = ""; - + { + g_set_error (error, + G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE, + _("Missing argument for %s"), option_name); + g_free (option_name); + return FALSE; + } option_name = g_strdup_printf ("-%c", group->entries[j].short_name); @@ -964,7 +969,8 @@ parse_long_option (GOptionContext *context, gchar *option_name; add_pending_null (context, &((*argv)[*index]), NULL); - + option_name = g_strconcat ("--", group->entries[j].long_name, NULL); + if (arg[len] == '=') value = arg + len + 1; else if (*index < *argc - 1) @@ -974,10 +980,14 @@ parse_long_option (GOptionContext *context, (*index)++; } else - value = ""; + { + g_set_error (error, + G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE, + _("Missing argument for %s"), option_name); + g_free (option_name); + return FALSE; + } - option_name = g_strconcat ("--", group->entries[j].long_name, NULL); - if (!parse_arg (context, group, &group->entries[j], value, option_name, error)) { g_free (option_name); diff --git a/tests/option-test.c b/tests/option-test.c index 1383b27..3c4035f 100644 --- a/tests/option-test.c +++ b/tests/option-test.c @@ -883,6 +883,41 @@ void lonely_dash_test (void) g_option_context_free (context); } +void +missing_arg_test (void) +{ + GOptionContext *context; + gboolean retval; + GError *error = NULL; + gchar **argv; + int argc; + gchar *arg = NULL; + GOptionEntry entries [] = + { { "test", 't', 0, G_OPTION_ARG_STRING, &arg, NULL, NULL }, + { NULL } }; + + context = g_option_context_new (NULL); + g_option_context_add_main_entries (context, entries, NULL); + + /* Now try parsing */ + argv = split_string ("program --test", &argc); + + retval = g_option_context_parse (context, &argc, &argv, &error); + g_assert (retval == FALSE); + g_clear_error (&error); + + g_strfreev (argv); + + /* Try parsing again */ + argv = split_string ("program --t", &argc); + + retval = g_option_context_parse (context, &argc, &argv, &error); + g_assert (retval == FALSE); + + g_strfreev (argv); + g_option_context_free (context); +} + int main (int argc, char **argv) { @@ -931,5 +966,8 @@ main (int argc, char **argv) /* test for bug 168008 */ lonely_dash_test (); + /* test for bug 305576 */ + missing_arg_test (); + return 0; } -- 2.7.4