summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/tokeniser/tokeniser.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/src/tokeniser/tokeniser.c b/src/tokeniser/tokeniser.c
index a7e67a1..2d9c4ed 100644
--- a/src/tokeniser/tokeniser.c
+++ b/src/tokeniser/tokeniser.c
@@ -393,6 +393,24 @@ hubbub_error hubbub_tokeniser_setopt(hubbub_tokeniser *tokeniser,
} else {
if (tokeniser->paused == true) {
tokeniser->paused = false;
+ /* When unpausing, if we have had something
+ * akin to document.write() happen while
+ * we were paused, then the insert_buf will
+ * have some content.
+ * In this case, we need to prepend it to
+ * the input buffer before we resume parsing,
+ * discarding the insert_buf as we go.
+ */
+ if (tokeniser->insert_buf->length > 0) {
+ parserutils_inputstream_insert(
+ tokeniser->input,
+ tokeniser->insert_buf->data,
+ tokeniser->insert_buf->length);
+ parserutils_buffer_discard(
+ tokeniser->insert_buf, 0,
+ tokeniser->insert_buf->length);
+ }
+
err = hubbub_tokeniser_run(tokeniser);
}
}