From cef912a36f581deefa3674d1bd988beb9473acbb Mon Sep 17 00:00:00 2001 From: Rupinder Singh Khokhar Date: Thu, 17 Jul 2014 18:47:04 +0530 Subject: Correctly handled NULL characters at some places --- src/treebuilder/in_body.c | 4 ++++ src/treebuilder/in_foreign_content.c | 12 ++++++++++-- src/treebuilder/in_select.c | 3 +++ 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/treebuilder/in_body.c b/src/treebuilder/in_body.c index dcccdd0..33b563e 100644 --- a/src/treebuilder/in_body.c +++ b/src/treebuilder/in_body.c @@ -204,6 +204,10 @@ hubbub_error process_character(hubbub_treebuilder *treebuilder, bool lr_flag = treebuilder->context.strip_leading_lr; const uint8_t *p; + if(dummy.ptr[0] == '\0') { + return HUBBUB_OK; + } + err = reconstruct_active_formatting_list(treebuilder); if (err != HUBBUB_OK) return err; diff --git a/src/treebuilder/in_foreign_content.c b/src/treebuilder/in_foreign_content.c index 97fb1d0..ddade53 100644 --- a/src/treebuilder/in_foreign_content.c +++ b/src/treebuilder/in_foreign_content.c @@ -19,6 +19,12 @@ #define S(s) s, SLEN(s) +/** + * UTF-8 encoding of U+FFFD REPLACEMENT CHARACTER + */ +static const uint8_t u_fffd[3] = { '\xEF', '\xBF', '\xBD' }; +static const hubbub_string u_fffd_str = { u_fffd, sizeof(u_fffd) }; + /** * Mapping table for case changes */ @@ -436,9 +442,11 @@ hubbub_error handle_in_foreign_content(hubbub_treebuilder *treebuilder, is_mathml_text_integration(cur_node, cur_node_ns)) { return process_as_in_secondary(treebuilder, token); } - c = (token->data.character.ptr); - if(*c != '\t' && *c != '\r' && *c != ' ' && *c != '\n' && *c != '\f') { + if(c[0] == '\0') { + err = append_text(treebuilder, &u_fffd_str); + return err; + } else if(*c != '\t' && *c != '\r' && *c != ' ' && *c != '\n' && *c != '\f') { treebuilder->context.frameset_ok = false; } diff --git a/src/treebuilder/in_select.c b/src/treebuilder/in_select.c index 7c15b49..7675dc5 100644 --- a/src/treebuilder/in_select.c +++ b/src/treebuilder/in_select.c @@ -32,6 +32,9 @@ hubbub_error handle_in_select(hubbub_treebuilder *treebuilder, switch (token->type) { case HUBBUB_TOKEN_CHARACTER: + if((token->data.character.ptr[0]) == '\0') { + break; + } err = append_text(treebuilder, &token->data.character); break; case HUBBUB_TOKEN_COMMENT: -- cgit v1.2.3