diff options
author | Matthias Clasen <maclas@gmx.de> | 2004-08-01 00:42:33 +0000 |
---|---|---|
committer | Matthias Clasen <matthiasc@src.gnome.org> | 2004-08-01 00:42:33 +0000 |
commit | f038c1070ac5d3c55749cbc31548f46fa9d59ae4 (patch) | |
tree | fb1fafea3b5a8c5e4b5536d37cf6025f660aa8d5 | |
parent | 250a6877409839d7c77e582ab52272fde54c639a (diff) |
Include a test involving consecutive backslashes followed by a non-escaped
Sat Jul 31 20:33:07 2004 Matthias Clasen <maclas@gmx.de>
* tests/shell-test.c: Include a test involving consecutive
backslashes followed by a non-escaped doublequote.
* glib/gshell.c (tokenize_command_line): Count consecutive
backslashes mod 2 to detect escaped doubleqotes. (#127306)
-rw-r--r-- | ChangeLog | 8 | ||||
-rw-r--r-- | ChangeLog.pre-2-10 | 8 | ||||
-rw-r--r-- | ChangeLog.pre-2-12 | 8 | ||||
-rw-r--r-- | ChangeLog.pre-2-6 | 8 | ||||
-rw-r--r-- | ChangeLog.pre-2-8 | 8 | ||||
-rw-r--r-- | glib/gshell.c | 16 | ||||
-rw-r--r-- | tests/shell-test.c | 5 |
7 files changed, 57 insertions, 4 deletions
@@ -1,3 +1,11 @@ +Sat Jul 31 20:33:07 2004 Matthias Clasen <maclas@gmx.de> + + * tests/shell-test.c: Include a test involving consecutive + backslashes followed by a non-escaped doublequote. + + * glib/gshell.c (tokenize_command_line): Count consecutive + backslashes mod 2 to detect escaped doubleqotes. (#127306) + 2004-07-30 Matthias Clasen <mclasen@redhat.com> * configure.in: Bump version. diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index 13ae0ed32..61e94575a 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,11 @@ +Sat Jul 31 20:33:07 2004 Matthias Clasen <maclas@gmx.de> + + * tests/shell-test.c: Include a test involving consecutive + backslashes followed by a non-escaped doublequote. + + * glib/gshell.c (tokenize_command_line): Count consecutive + backslashes mod 2 to detect escaped doubleqotes. (#127306) + 2004-07-30 Matthias Clasen <mclasen@redhat.com> * configure.in: Bump version. diff --git a/ChangeLog.pre-2-12 b/ChangeLog.pre-2-12 index 13ae0ed32..61e94575a 100644 --- a/ChangeLog.pre-2-12 +++ b/ChangeLog.pre-2-12 @@ -1,3 +1,11 @@ +Sat Jul 31 20:33:07 2004 Matthias Clasen <maclas@gmx.de> + + * tests/shell-test.c: Include a test involving consecutive + backslashes followed by a non-escaped doublequote. + + * glib/gshell.c (tokenize_command_line): Count consecutive + backslashes mod 2 to detect escaped doubleqotes. (#127306) + 2004-07-30 Matthias Clasen <mclasen@redhat.com> * configure.in: Bump version. diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index 13ae0ed32..61e94575a 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,3 +1,11 @@ +Sat Jul 31 20:33:07 2004 Matthias Clasen <maclas@gmx.de> + + * tests/shell-test.c: Include a test involving consecutive + backslashes followed by a non-escaped doublequote. + + * glib/gshell.c (tokenize_command_line): Count consecutive + backslashes mod 2 to detect escaped doubleqotes. (#127306) + 2004-07-30 Matthias Clasen <mclasen@redhat.com> * configure.in: Bump version. diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index 13ae0ed32..61e94575a 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,11 @@ +Sat Jul 31 20:33:07 2004 Matthias Clasen <maclas@gmx.de> + + * tests/shell-test.c: Include a test involving consecutive + backslashes followed by a non-escaped doublequote. + + * glib/gshell.c (tokenize_command_line): Count consecutive + backslashes mod 2 to detect escaped doubleqotes. (#127306) + 2004-07-30 Matthias Clasen <mclasen@redhat.com> * configure.in: Bump version. diff --git a/glib/gshell.c b/glib/gshell.c index 9cc49c82b..849e015dc 100644 --- a/glib/gshell.c +++ b/glib/gshell.c @@ -413,10 +413,12 @@ tokenize_command_line (const gchar *command_line, const gchar *p; GString *current_token = NULL; GSList *retval = NULL; - + gboolean quoted;; + current_quote = '\0'; + quoted = FALSE; p = command_line; - + while (*p) { if (current_quote == '\\') @@ -452,7 +454,7 @@ tokenize_command_line (const gchar *command_line, { if (*p == current_quote && /* check that it isn't an escaped double quote */ - !(current_quote == '"' && p != command_line && *(p - 1) == '\\')) + !(current_quote == '"' && quoted)) { /* close the quote */ current_quote = '\0'; @@ -516,6 +518,14 @@ tokenize_command_line (const gchar *command_line, } } + /* We need to count consecutive backslashes mod 2, + * to detect escaped doublequotes. + */ + if (*p != '\\') + quoted = FALSE; + else + quoted = !quoted; + ++p; } diff --git a/tests/shell-test.c b/tests/shell-test.c index 0142b2540..3762cb4cb 100644 --- a/tests/shell-test.c +++ b/tests/shell-test.c @@ -56,6 +56,7 @@ test_command_lines[] = /* 9 */ "foo \\\" la la la", /* 10 */ "foo \\ foo woo woo\\ ", /* 11 */ "foo \"yada yada \\$\\\"\"", + /* 12 */ "foo \"c:\\\\\"", NULL }; @@ -71,6 +72,7 @@ static const gchar *result8[] = { "foo", "", "", NULL }; static const gchar *result9[] = { "foo", "\"", "la", "la", "la", NULL }; static const gchar *result10[] = { "foo", " foo", "woo", "woo ", NULL }; static const gchar *result11[] = { "foo", "yada yada $\"", NULL }; +static const gchar *result12[] = { "foo", "c:\\", NULL }; static const TestResult correct_results[] = @@ -86,7 +88,8 @@ correct_results[] = { G_N_ELEMENTS (result8) - 1, result8 }, { G_N_ELEMENTS (result9) - 1, result9 }, { G_N_ELEMENTS (result10) - 1, result10 }, - { G_N_ELEMENTS (result11) - 1, result11 } + { G_N_ELEMENTS (result11) - 1, result11 }, + { G_N_ELEMENTS (result12) - 1, result12 } }; static void |