summaryrefslogtreecommitdiff
path: root/src/tokeniser/tokeniser.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/tokeniser/tokeniser.c')
-rw-r--r--src/tokeniser/tokeniser.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/src/tokeniser/tokeniser.c b/src/tokeniser/tokeniser.c
index 500a88d..66c36d5 100644
--- a/src/tokeniser/tokeniser.c
+++ b/src/tokeniser/tokeniser.c
@@ -3255,7 +3255,7 @@ hubbub_error hubbub_tokeniser_handle_cdata_block(hubbub_tokeniser *tokeniser)
if (error != PARSERUTILS_OK) {
if (error == PARSERUTILS_EOF) {
tokeniser->state = STATE_DATA;
- return emit_current_chars(tokeniser);
+ return HUBBUB_OK;
} else {
return hubbub_error_from_parserutils_error(error);
}
@@ -3263,17 +3263,18 @@ hubbub_error hubbub_tokeniser_handle_cdata_block(hubbub_tokeniser *tokeniser)
c = *cptr;
- if (c == ']' && (tokeniser->context.match_cdata.end == 0 ||
- tokeniser->context.match_cdata.end == 1)) {
+ if (c == ']' && (tokeniser->context.match_cdata.end >= 0)) {
tokeniser->context.pending += len;
tokeniser->context.match_cdata.end += len;
- } else if (c == '>' && tokeniser->context.match_cdata.end == 2) {
+ } else if (c == '>' && tokeniser->context.match_cdata.end >= 2) {
/* Remove the previous two "]]" */
tokeniser->context.pending -= 2;
tokeniser->context.match_cdata.end = 0;
/* Emit any pending characters */
- emit_current_chars(tokeniser);
+ if(tokeniser->context.pending > 0) {
+ emit_current_chars(tokeniser);
+ }
/* Now move past the "]]>" bit */
parserutils_inputstream_advance(tokeniser->input, SLEN("]]>"));