gshell: Fix parsing of comments in command lines.
authorDominique Leuenberger <dimstar@opensuse.org>
Fri, 17 Aug 2012 09:10:41 +0000 (11:10 +0200)
committerMatthias Clasen <mclasen@redhat.com>
Thu, 30 Aug 2012 00:42:25 +0000 (20:42 -0400)
Fixes bug 562907

glib/gshell.c
glib/tests/shell.c

index 32cb334..6b166e1 100644 (file)
@@ -520,6 +520,24 @@ tokenize_command_line (const gchar *command_line,
               /* FALL THRU */
               
             case '#':
+              if (p == command_line)
+               { /* '#' was the first char */
+                  current_quote = *p;
+                  break;
+                }
+              switch(*(p-1))
+                {
+                  case ' ':
+                  case '\n':
+                  case '\0':
+                    current_quote = *p;
+                    break;
+                  default:
+                    ensure_token (&current_token);
+                    g_string_append_c (current_token, *p);
+                   break;
+                }
+              break;
             case '\\':
               current_quote = *p;
               break;
index c1862b6..08fd3fe 100644 (file)
@@ -59,6 +59,8 @@ static CmdlineTest cmdline_tests[] =
   { "foo \"yada yada \\$\\\"\"", 2, { "foo", "yada yada $\"", NULL }, -1 },
   { "foo \"c:\\\\\"", 2, { "foo", "c:\\", NULL }, -1 },
   { "foo # bla bla bla\n bar", 2, { "foo", "bar", NULL }, -1 },
+  { "foo a#b", 2, { "foo", "a#b", NULL }, -1 },
+  { "#foo", 0, { NULL }, -1 },
   { "foo bar \\", 0, { NULL }, G_SHELL_ERROR_BAD_QUOTING },
   { "foo 'bar baz", 0, { NULL }, G_SHELL_ERROR_BAD_QUOTING },
   { "foo '\"bar\" baz", 0, { NULL }, G_SHELL_ERROR_BAD_QUOTING },