diff options
author | Andrew Sidwell <andy@entai.co.uk> | 2008-07-31 15:35:28 +0000 |
---|---|---|
committer | Andrew Sidwell <andy@entai.co.uk> | 2008-07-31 15:35:28 +0000 |
commit | 4394a6787388d8837ff89eb29878b04cdc6a93a4 (patch) | |
tree | 5be2648a22cf488fbfddd7c7f8cdf7abb4cc5841 /src | |
parent | 923baf72744a3b91a82266e535fb45fa66d9cc19 (diff) | |
download | libhubbub-4394a6787388d8837ff89eb29878b04cdc6a93a4.tar.gz libhubbub-4394a6787388d8837ff89eb29878b04cdc6a93a4.tar.bz2 |
Handle NUL properly everywhere it should be.
svn path=/trunk/hubbub/; revision=4843
Diffstat (limited to 'src')
-rw-r--r-- | src/tokeniser/tokeniser.c | 17 |
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; |