diff --git a/ChangeLog b/ChangeLog index ab5858c3c..211cd0b69 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,21 @@ +2002-05-19 Matthias Clasen + + * 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 * glib/gscanner.c (g_scanner_unexp_token): fix missing cases for diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index ab5858c3c..211cd0b69 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,21 @@ +2002-05-19 Matthias Clasen + + * 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 * glib/gscanner.c (g_scanner_unexp_token): fix missing cases for diff --git a/ChangeLog.pre-2-12 b/ChangeLog.pre-2-12 index ab5858c3c..211cd0b69 100644 --- a/ChangeLog.pre-2-12 +++ b/ChangeLog.pre-2-12 @@ -1,3 +1,21 @@ +2002-05-19 Matthias Clasen + + * 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 * glib/gscanner.c (g_scanner_unexp_token): fix missing cases for diff --git a/ChangeLog.pre-2-2 b/ChangeLog.pre-2-2 index ab5858c3c..211cd0b69 100644 --- a/ChangeLog.pre-2-2 +++ b/ChangeLog.pre-2-2 @@ -1,3 +1,21 @@ +2002-05-19 Matthias Clasen + + * 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 * glib/gscanner.c (g_scanner_unexp_token): fix missing cases for diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4 index ab5858c3c..211cd0b69 100644 --- a/ChangeLog.pre-2-4 +++ b/ChangeLog.pre-2-4 @@ -1,3 +1,21 @@ +2002-05-19 Matthias Clasen + + * 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 * glib/gscanner.c (g_scanner_unexp_token): fix missing cases for diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index ab5858c3c..211cd0b69 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,3 +1,21 @@ +2002-05-19 Matthias Clasen + + * 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 * glib/gscanner.c (g_scanner_unexp_token): fix missing cases for diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index ab5858c3c..211cd0b69 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,21 @@ +2002-05-19 Matthias Clasen + + * 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 * glib/gscanner.c (g_scanner_unexp_token): fix missing cases for diff --git a/glib/gmarkup.c b/glib/gmarkup.c index 8f5c6b861..a34e477c8 100644 --- a/glib/gmarkup.c +++ b/glib/gmarkup.c @@ -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 == '/') @@ -1498,8 +1504,23 @@ g_markup_parse_context_parse (GMarkupParseContext *context, /* Possible next state: AFTER_CLOSE_ANGLE */ do { + 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, "partial_chunk->str, "?")) || + (g_str_has_prefix (context->partial_chunk->str, " + diff --git a/tests/markups/valid-8.gmarkup b/tests/markups/valid-8.gmarkup new file mode 100644 index 000000000..a75aee055 --- /dev/null +++ b/tests/markups/valid-8.gmarkup @@ -0,0 +1 @@ +>>> CDATA ]]> diff --git a/tests/run-markup-tests.sh b/tests/run-markup-tests.sh index 2078330ee..fb6508622 100755 --- a/tests/run-markup-tests.sh +++ b/tests/run-markup-tests.sh @@ -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