From 4394a6787388d8837ff89eb29878b04cdc6a93a4 Mon Sep 17 00:00:00 2001 From: Andrew Sidwell Date: Thu, 31 Jul 2008 15:35:28 +0000 Subject: Handle NUL properly everywhere it should be. svn path=/trunk/hubbub/; revision=4843 --- src/tokeniser/tokeniser.c | 17 ++++++++++++----- 1 file 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 @@ -1008,6 +1008,15 @@ bool hubbub_tokeniser_handle_tag_open(hubbub_tokeniser *tokeniser) START_BUF(ctag->name, (uint8_t *)cptr, len); 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; -- cgit v1.2.3