Include a test involving consecutive backslashes followed by a non-escaped
authorMatthias Clasen <maclas@gmx.de>
Sun, 1 Aug 2004 00:39:45 +0000 (00:39 +0000)
committerMatthias Clasen <matthiasc@src.gnome.org>
Sun, 1 Aug 2004 00:39:45 +0000 (00:39 +0000)
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)

ChangeLog
ChangeLog.pre-2-10
ChangeLog.pre-2-12
ChangeLog.pre-2-6
ChangeLog.pre-2-8
glib/gshell.c
tests/shell-test.c

index 8835bd2..44786c8 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -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>
 
        * glib/gconvert.c (g_unescape_uri_string): Don't validate
index 8835bd2..44786c8 100644 (file)
@@ -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>
 
        * glib/gconvert.c (g_unescape_uri_string): Don't validate
index 8835bd2..44786c8 100644 (file)
@@ -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>
 
        * glib/gconvert.c (g_unescape_uri_string): Don't validate
index 8835bd2..44786c8 100644 (file)
@@ -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>
 
        * glib/gconvert.c (g_unescape_uri_string): Don't validate
index 8835bd2..44786c8 100644 (file)
@@ -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>
 
        * glib/gconvert.c (g_unescape_uri_string): Don't validate
index 9cc49c8..849e015 100644 (file)
@@ -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;
     }
 
index 0142b25..3762cb4 100644 (file)
@@ -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