From eb03e32c68b81e953b0c3d86b657505eff7a8469 Mon Sep 17 00:00:00 2001 From: Rupinder Singh Khokhar Date: Mon, 28 Jul 2014 13:59:33 +0530 Subject: correctly handle meta element in head --- src/treebuilder/in_head.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/treebuilder/in_head.c b/src/treebuilder/in_head.c index a10ba23..9429058 100644 --- a/src/treebuilder/in_head.c +++ b/src/treebuilder/in_head.c @@ -33,6 +33,7 @@ static hubbub_error process_meta_in_head(hubbub_treebuilder *treebuilder, uint16_t content_type_enc = 0; size_t i; hubbub_error err = HUBBUB_OK; + bool http_equiv = false; err = insert_element(treebuilder, &token->data.tag, false); if (err != HUBBUB_OK) @@ -54,6 +55,20 @@ static hubbub_error process_meta_in_head(hubbub_treebuilder *treebuilder, assert(utf16 != 0 && utf16be != 0 && utf16le != 0); } + for (i = 0; i < token->data.tag.n_attributes; i++) { + hubbub_attribute *attr = &token->data.tag.attributes[i]; + + if (hubbub_string_match_ci(attr->name.ptr, attr->name.len, + (const uint8_t *) "http-equiv", + SLEN("http-equiv")) == true && + hubbub_string_match_ci(attr->value.ptr, attr->value.len, + (const uint8_t *) "content-type", + SLEN("content-type")) == true + ) { + http_equiv = true; + } + } + for (i = 0; i < token->data.tag.n_attributes; i++) { hubbub_attribute *attr = &token->data.tag.attributes[i]; @@ -66,7 +81,8 @@ static hubbub_error process_meta_in_head(hubbub_treebuilder *treebuilder, attr->value.len); } else if (hubbub_string_match(attr->name.ptr, attr->name.len, (const uint8_t *) "content", - SLEN("content")) == true) { + SLEN("content")) == true && + http_equiv == true) { /* Extract charset from Content-Type */ content_type_enc = hubbub_charset_parse_content( attr->value.ptr, attr->value.len); -- cgit v1.2.3