summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/treebuilder/generic_rcdata.c8
-rw-r--r--src/treebuilder/script_collect.c45
2 files changed, 29 insertions, 24 deletions
diff --git a/src/treebuilder/generic_rcdata.c b/src/treebuilder/generic_rcdata.c
index 07173cf..0ab3b8c 100644
--- a/src/treebuilder/generic_rcdata.c
+++ b/src/treebuilder/generic_rcdata.c
@@ -79,7 +79,7 @@ bool handle_generic_rcdata(hubbub_treebuilder *treebuilder,
break;
}
- if (done) {
+ if (done && treebuilder->context.collect.string.len) {
int success;
void *text, *appended;
@@ -107,6 +107,9 @@ bool handle_generic_rcdata(hubbub_treebuilder *treebuilder,
treebuilder->tree_handler->unref_node(
treebuilder->tree_handler->ctx, text);
+ }
+
+ if (done) {
/* Clean up context */
treebuilder->tree_handler->unref_node(
treebuilder->tree_handler->ctx,
@@ -114,8 +117,7 @@ bool handle_generic_rcdata(hubbub_treebuilder *treebuilder,
treebuilder->context.collect.node = NULL;
/* Return to previous insertion mode */
- treebuilder->context.mode =
- treebuilder->context.collect.mode;
+ treebuilder->context.mode = treebuilder->context.collect.mode;
}
return reprocess;
diff --git a/src/treebuilder/script_collect.c b/src/treebuilder/script_collect.c
index 7f61f95..0ec9b12 100644
--- a/src/treebuilder/script_collect.c
+++ b/src/treebuilder/script_collect.c
@@ -63,31 +63,33 @@ bool handle_script_collect_characters(hubbub_treebuilder *treebuilder,
int success;
void *text, *appended;
- success = treebuilder->tree_handler->create_text(
- treebuilder->tree_handler->ctx,
- &treebuilder->context.collect.string,
- &text);
- if (success != 0) {
- /** \todo errors */
- }
+ if (treebuilder->context.collect.string.len) {
+ success = treebuilder->tree_handler->create_text(
+ treebuilder->tree_handler->ctx,
+ &treebuilder->context.collect.string,
+ &text);
+ if (success != 0) {
+ /** \todo errors */
+ }
- /** \todo fragment case -- skip this lot entirely */
+ /** \todo fragment case -- skip this lot entirely */
- success = treebuilder->tree_handler->append_child(
- treebuilder->tree_handler->ctx,
- treebuilder->context.collect.node,
- text, &appended);
- if (success != 0) {
- /** \todo errors */
- treebuilder->tree_handler->unref_node(
+ success = treebuilder->tree_handler->append_child(
treebuilder->tree_handler->ctx,
- text);
- }
+ treebuilder->context.collect.node,
+ text, &appended);
+ if (success != 0) {
+ /** \todo errors */
+ treebuilder->tree_handler->unref_node(
+ treebuilder->tree_handler->ctx,
+ text);
+ }
- treebuilder->tree_handler->unref_node(
- treebuilder->tree_handler->ctx, appended);
- treebuilder->tree_handler->unref_node(
- treebuilder->tree_handler->ctx, text);
+ treebuilder->tree_handler->unref_node(
+ treebuilder->tree_handler->ctx, appended);
+ treebuilder->tree_handler->unref_node(
+ treebuilder->tree_handler->ctx, text);
+ }
/** \todo insertion point manipulation */
@@ -106,6 +108,7 @@ bool handle_script_collect_characters(hubbub_treebuilder *treebuilder,
treebuilder->tree_handler->unref_node(
treebuilder->tree_handler->ctx,
appended);
+
treebuilder->tree_handler->unref_node(
treebuilder->tree_handler->ctx,
treebuilder->context.collect.node);