New testcases.
authorMatthias Clasen <maclas@gmx.de>
Sat, 18 May 2002 22:06:54 +0000 (22:06 +0000)
committerMatthias Clasen <matthiasc@src.gnome.org>
Sat, 18 May 2002 22:06:54 +0000 (22:06 +0000)
2002-05-18  Matthias Clasen  <maclas@gmx.de>

* tests/markups/fail-36.gmarkup:
* tests/markups/fail-35.gmarkup:
* tests/markups/valid-8.gmarkup:
* tests/markups/valid-7.gmarkup:
* tests/markups/valid-6.gmarkup:
* tests/markups/valid-5.gmarkup: New testcases.

* tests/markup-test.c (passthrough_handler):
(text_handler): Don't ignore the text_len parameter.

* glib/gmarkup.c (find_current_text_end): Don't hang on embedded
nuls.  (#81977)
(g_markup_parse_context_parse): Fix passthrough handling to
correctly skip processing instructions, comments, doctype
declarations and CDATA marked sections.  (#81977)

16 files changed:
ChangeLog
ChangeLog.pre-2-10
ChangeLog.pre-2-12
ChangeLog.pre-2-2
ChangeLog.pre-2-4
ChangeLog.pre-2-6
ChangeLog.pre-2-8
glib/gmarkup.c
tests/markup-test.c
tests/markups/fail-35.gmarkup [new file with mode: 0644]
tests/markups/fail-36.gmarkup [new file with mode: 0644]
tests/markups/valid-5.gmarkup [new file with mode: 0644]
tests/markups/valid-6.gmarkup [new file with mode: 0644]
tests/markups/valid-7.gmarkup [new file with mode: 0644]
tests/markups/valid-8.gmarkup [new file with mode: 0644]
tests/run-markup-tests.sh

index 024e7a5..311a2c7 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,21 @@
+2002-05-18  Matthias Clasen  <maclas@gmx.de>
+
+       * tests/markups/fail-36.gmarkup: 
+       * tests/markups/fail-35.gmarkup: 
+       * tests/markups/valid-8.gmarkup: 
+       * tests/markups/valid-7.gmarkup: 
+       * tests/markups/valid-6.gmarkup: 
+       * tests/markups/valid-5.gmarkup: New testcases.
+
+       * tests/markup-test.c (passthrough_handler): 
+       (text_handler): Don't ignore the text_len parameter.
+
+       * glib/gmarkup.c (find_current_text_end): Don't hang on embedded
+       nuls.  (#81977)
+       (g_markup_parse_context_parse): Fix passthrough handling to
+       correctly skip processing instructions, comments, doctype
+       declarations and CDATA marked sections.  (#81977)
+
 Sat May 18 00:21:51 2002  Tim Janik  <timj@gtk.org>
 
        [merged from stable]
index 024e7a5..311a2c7 100644 (file)
@@ -1,3 +1,21 @@
+2002-05-18  Matthias Clasen  <maclas@gmx.de>
+
+       * tests/markups/fail-36.gmarkup: 
+       * tests/markups/fail-35.gmarkup: 
+       * tests/markups/valid-8.gmarkup: 
+       * tests/markups/valid-7.gmarkup: 
+       * tests/markups/valid-6.gmarkup: 
+       * tests/markups/valid-5.gmarkup: New testcases.
+
+       * tests/markup-test.c (passthrough_handler): 
+       (text_handler): Don't ignore the text_len parameter.
+
+       * glib/gmarkup.c (find_current_text_end): Don't hang on embedded
+       nuls.  (#81977)
+       (g_markup_parse_context_parse): Fix passthrough handling to
+       correctly skip processing instructions, comments, doctype
+       declarations and CDATA marked sections.  (#81977)
+
 Sat May 18 00:21:51 2002  Tim Janik  <timj@gtk.org>
 
        [merged from stable]
index 024e7a5..311a2c7 100644 (file)
@@ -1,3 +1,21 @@
+2002-05-18  Matthias Clasen  <maclas@gmx.de>
+
+       * tests/markups/fail-36.gmarkup: 
+       * tests/markups/fail-35.gmarkup: 
+       * tests/markups/valid-8.gmarkup: 
+       * tests/markups/valid-7.gmarkup: 
+       * tests/markups/valid-6.gmarkup: 
+       * tests/markups/valid-5.gmarkup: New testcases.
+
+       * tests/markup-test.c (passthrough_handler): 
+       (text_handler): Don't ignore the text_len parameter.
+
+       * glib/gmarkup.c (find_current_text_end): Don't hang on embedded
+       nuls.  (#81977)
+       (g_markup_parse_context_parse): Fix passthrough handling to
+       correctly skip processing instructions, comments, doctype
+       declarations and CDATA marked sections.  (#81977)
+
 Sat May 18 00:21:51 2002  Tim Janik  <timj@gtk.org>
 
        [merged from stable]
index 024e7a5..311a2c7 100644 (file)
@@ -1,3 +1,21 @@
+2002-05-18  Matthias Clasen  <maclas@gmx.de>
+
+       * tests/markups/fail-36.gmarkup: 
+       * tests/markups/fail-35.gmarkup: 
+       * tests/markups/valid-8.gmarkup: 
+       * tests/markups/valid-7.gmarkup: 
+       * tests/markups/valid-6.gmarkup: 
+       * tests/markups/valid-5.gmarkup: New testcases.
+
+       * tests/markup-test.c (passthrough_handler): 
+       (text_handler): Don't ignore the text_len parameter.
+
+       * glib/gmarkup.c (find_current_text_end): Don't hang on embedded
+       nuls.  (#81977)
+       (g_markup_parse_context_parse): Fix passthrough handling to
+       correctly skip processing instructions, comments, doctype
+       declarations and CDATA marked sections.  (#81977)
+
 Sat May 18 00:21:51 2002  Tim Janik  <timj@gtk.org>
 
        [merged from stable]
index 024e7a5..311a2c7 100644 (file)
@@ -1,3 +1,21 @@
+2002-05-18  Matthias Clasen  <maclas@gmx.de>
+
+       * tests/markups/fail-36.gmarkup: 
+       * tests/markups/fail-35.gmarkup: 
+       * tests/markups/valid-8.gmarkup: 
+       * tests/markups/valid-7.gmarkup: 
+       * tests/markups/valid-6.gmarkup: 
+       * tests/markups/valid-5.gmarkup: New testcases.
+
+       * tests/markup-test.c (passthrough_handler): 
+       (text_handler): Don't ignore the text_len parameter.
+
+       * glib/gmarkup.c (find_current_text_end): Don't hang on embedded
+       nuls.  (#81977)
+       (g_markup_parse_context_parse): Fix passthrough handling to
+       correctly skip processing instructions, comments, doctype
+       declarations and CDATA marked sections.  (#81977)
+
 Sat May 18 00:21:51 2002  Tim Janik  <timj@gtk.org>
 
        [merged from stable]
index 024e7a5..311a2c7 100644 (file)
@@ -1,3 +1,21 @@
+2002-05-18  Matthias Clasen  <maclas@gmx.de>
+
+       * tests/markups/fail-36.gmarkup: 
+       * tests/markups/fail-35.gmarkup: 
+       * tests/markups/valid-8.gmarkup: 
+       * tests/markups/valid-7.gmarkup: 
+       * tests/markups/valid-6.gmarkup: 
+       * tests/markups/valid-5.gmarkup: New testcases.
+
+       * tests/markup-test.c (passthrough_handler): 
+       (text_handler): Don't ignore the text_len parameter.
+
+       * glib/gmarkup.c (find_current_text_end): Don't hang on embedded
+       nuls.  (#81977)
+       (g_markup_parse_context_parse): Fix passthrough handling to
+       correctly skip processing instructions, comments, doctype
+       declarations and CDATA marked sections.  (#81977)
+
 Sat May 18 00:21:51 2002  Tim Janik  <timj@gtk.org>
 
        [merged from stable]
index 024e7a5..311a2c7 100644 (file)
@@ -1,3 +1,21 @@
+2002-05-18  Matthias Clasen  <maclas@gmx.de>
+
+       * tests/markups/fail-36.gmarkup: 
+       * tests/markups/fail-35.gmarkup: 
+       * tests/markups/valid-8.gmarkup: 
+       * tests/markups/valid-7.gmarkup: 
+       * tests/markups/valid-6.gmarkup: 
+       * tests/markups/valid-5.gmarkup: New testcases.
+
+       * tests/markup-test.c (passthrough_handler): 
+       (text_handler): Don't ignore the text_len parameter.
+
+       * glib/gmarkup.c (find_current_text_end): Don't hang on embedded
+       nuls.  (#81977)
+       (g_markup_parse_context_parse): Fix passthrough handling to
+       correctly skip processing instructions, comments, doctype
+       declarations and CDATA marked sections.  (#81977)
+
 Sat May 18 00:21:51 2002  Tim Janik  <timj@gtk.org>
 
        [merged from stable]
index 8f5c6b8..f7a2cbf 100644 (file)
@@ -97,6 +97,7 @@ struct _GMarkupParseContext
 
   guint document_empty : 1;
   guint parsing : 1;
+  gint balance;
 };
 
 /**
@@ -154,6 +155,8 @@ g_markup_parse_context_new (const GMarkupParser *parser,
   context->document_empty = TRUE;
   context->parsing = FALSE;
 
+  context->balance = 0;
+
   return context;
 }
 
@@ -722,8 +725,10 @@ find_current_text_end (GMarkupParseContext *context)
   p = context->current_text;
   next = g_utf8_find_next_char (p, end);
 
-  while (next)
+  while (next && *next)
     {
+      if (p == next)
+       next++;
       p = next;
       next = g_utf8_find_next_char (p, end);
     }
@@ -963,6 +968,7 @@ g_markup_parse_context_parse (GMarkupParseContext *context,
               const gchar *openangle = "<";
               add_to_partial (context, openangle, openangle + 1);
               context->start = context->iter;
+             context->balance = 1;
               context->state = STATE_INSIDE_PASSTHROUGH;
             }
           else if (*context->iter == '/')
@@ -1493,13 +1499,28 @@ g_markup_parse_context_parse (GMarkupParseContext *context,
               g_free (close_name);
             }
           break;
-
+         
         case STATE_INSIDE_PASSTHROUGH:
           /* Possible next state: AFTER_CLOSE_ANGLE */
           do
             {
-              if (*context->iter == '>')
-                break;
+             if (*context->iter == '<') 
+               context->balance++;
+              if (*context->iter == '>') 
+               {
+                 context->balance--;
+                 add_to_partial (context, context->start, context->iter);
+                 context->start = context->iter;
+                 if ((g_str_has_prefix (context->partial_chunk->str, "<?")
+                      && g_str_has_suffix (context->partial_chunk->str, "?")) ||
+                     (g_str_has_prefix (context->partial_chunk->str, "<!--")
+                      && g_str_has_suffix (context->partial_chunk->str, "--")) ||
+                     (g_str_has_prefix (context->partial_chunk->str, "<![CDATA[") 
+                      && g_str_has_suffix (context->partial_chunk->str, "]]")) ||
+                     (g_str_has_prefix (context->partial_chunk->str, "<!DOCTYPE")
+                      && context->balance == 0)) 
+                   break;
+               }
             }
           while (advance_char (context));
 
index 53b86c2..c174066 100644 (file)
@@ -61,7 +61,7 @@ text_handler           (GMarkupParseContext *context,
                         GError             **error)
 {
   indent (0);
-  printf ("TEXT '%s'\n", text);
+  printf ("TEXT '%.*s'\n", (int)text_len, text);
 }
 
 
@@ -74,7 +74,7 @@ passthrough_handler    (GMarkupParseContext *context,
 {
   indent (0);
 
-  printf ("PASS '%s'\n", passthrough_text);
+  printf ("PASS '%.*s'\n", (int)text_len, passthrough_text);
 }
 
 static void
@@ -200,3 +200,4 @@ main (int   argc,
       return 1;
     }
 }
+
diff --git a/tests/markups/fail-35.gmarkup b/tests/markups/fail-35.gmarkup
new file mode 100644 (file)
index 0000000..d7f3512
--- /dev/null
@@ -0,0 +1 @@
+<foo>gedit&</foo>
diff --git a/tests/markups/fail-36.gmarkup b/tests/markups/fail-36.gmarkup
new file mode 100644 (file)
index 0000000..110ce48
Binary files /dev/null and b/tests/markups/fail-36.gmarkup differ
diff --git a/tests/markups/valid-5.gmarkup b/tests/markups/valid-5.gmarkup
new file mode 100644 (file)
index 0000000..3b861de
--- /dev/null
@@ -0,0 +1,2 @@
+<?xml version="1.0" ?>
+<foo></foo>
diff --git a/tests/markups/valid-6.gmarkup b/tests/markups/valid-6.gmarkup
new file mode 100644 (file)
index 0000000..d7c065a
--- /dev/null
@@ -0,0 +1,4 @@
+<!DOCTYPE foo "foo" [
+<!ELEMENT foo ANY >
+]>
+<foo></foo>
diff --git a/tests/markups/valid-7.gmarkup b/tests/markups/valid-7.gmarkup
new file mode 100644 (file)
index 0000000..832445d
--- /dev/null
@@ -0,0 +1,2 @@
+<!-- a comment -->
+<foo></foo>
diff --git a/tests/markups/valid-8.gmarkup b/tests/markups/valid-8.gmarkup
new file mode 100644 (file)
index 0000000..a75aee0
--- /dev/null
@@ -0,0 +1 @@
+<foo><![CDATA[ some <<<<>>>> CDATA ]]></foo>
index 2078330..fb65086 100755 (executable)
@@ -9,6 +9,9 @@ fail ()
 for I in $srcdir/markups/fail-*.gmarkup; do
   echo "Parsing $I, should fail"
   ./markup-test $I > /dev/null && fail "failed to generate error on $I"
+  if test "$?" != "1"; then
+    fail "unexpected error on $I"
+  fi  
 done
 
 for I in $srcdir/markups/valid-*.gmarkup; do