summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Sidwell <andy@entai.co.uk>2008-07-31 15:35:28 +0000
committerAndrew Sidwell <andy@entai.co.uk>2008-07-31 15:35:28 +0000
commit4394a6787388d8837ff89eb29878b04cdc6a93a4 (patch)
tree5be2648a22cf488fbfddd7c7f8cdf7abb4cc5841
parent923baf72744a3b91a82266e535fb45fa66d9cc19 (diff)
downloadlibhubbub-4394a6787388d8837ff89eb29878b04cdc6a93a4.tar.gz
libhubbub-4394a6787388d8837ff89eb29878b04cdc6a93a4.tar.bz2
Handle NUL properly everywhere it should be.
svn path=/trunk/hubbub/; revision=4843
-rw-r--r--src/tokeniser/tokeniser.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/src/tokeniser/tokeniser.c b/src/tokeniser/tokeniser.c
index dee0a76..d6a061c 100644
--- a/src/tokeniser/tokeniser.c
+++ b/src/tokeniser/tokeniser.c
@@ -1009,6 +1009,15 @@ bool hubbub_tokeniser_handle_tag_open(hubbub_tokeniser *tokeniser)
ctag->n_attributes = 0;
tokeniser->state = STATE_TAG_NAME;
+ } else if (c == '\0') {
+ COLLECT_NOBUF(tokeniser->context.chars, len);
+ tokeniser->context.current_tag_type =
+ HUBBUB_TOKEN_START_TAG;
+
+ START_BUF(ctag->name, u_fffd, sizeof(u_fffd));
+ ctag->n_attributes = 0;
+
+ tokeniser->state = STATE_TAG_NAME;
} else if (c == '>') {
/** \todo parse error */
@@ -2072,12 +2081,10 @@ bool hubbub_tokeniser_handle_doctype_name(hubbub_tokeniser *tokeniser)
FINISH(cdoc->name);
emit_current_doctype(tokeniser, false);
tokeniser->state = STATE_DATA;
+ } else if (c == '\0') {
+ COLLECT_CHAR(cdoc->name, u_fffd, sizeof(u_fffd));
} else {
- if (c == '\0') {
- COLLECT_CHAR(cdoc->name, u_fffd, sizeof(u_fffd));
- } else {
- COLLECT(cdoc->name, cptr, len);
- }
+ COLLECT(cdoc->name, cptr, len);
}
return true;