From 33619d70037d08ec202e7b08ad4a7ea6abfe1636 Mon Sep 17 00:00:00 2001 From: John Mark Bell Date: Wed, 15 Apr 2009 11:28:07 +0000 Subject: Handle hubbub errors. Handle parser binding errors. svn path=/trunk/netsurf/; revision=7087 --- render/html.c | 28 +++++++++++++++++++++++++--- render/hubbub_binding.c | 5 ++--- 2 files changed, 27 insertions(+), 6 deletions(-) diff --git a/render/html.c b/render/html.c index 8dc683739..7e7070613 100644 --- a/render/html.c +++ b/render/html.c @@ -188,6 +188,13 @@ bool html_process_data(struct content *c, char *data, unsigned int size) (uint8_t *) data + x, CHUNK); if (err == BINDING_ENCODINGCHANGE) { goto encoding_change; + } else if (err != BINDING_OK) { + union content_msg_data msg_data; + + msg_data.error = messages_get("NoMemory"); + content_broadcast(c, CONTENT_MSG_ERROR, msg_data); + + return false; } gui_multitask(); @@ -197,6 +204,13 @@ bool html_process_data(struct content *c, char *data, unsigned int size) (uint8_t *) data + x, (size - x)); if (err == BINDING_ENCODINGCHANGE) { goto encoding_change; + } else if (err != BINDING_OK) { + union content_msg_data msg_data; + + msg_data.error = messages_get("NoMemory"); + content_broadcast(c, CONTENT_MSG_ERROR, msg_data); + + return false; } return true; @@ -279,6 +293,7 @@ encoding_change: bool html_convert(struct content *c, int width, int height) { + binding_error err; xmlNode *html, *head; union content_msg_data msg_data; unsigned int time_before, time_taken; @@ -288,8 +303,6 @@ bool html_convert(struct content *c, int width, int height) /* finish parsing */ if (c->source_size == 0) { - binding_error err; - /* Destroy current binding */ binding_destroy_tree(c->data.html.parser_binding); @@ -321,7 +334,16 @@ bool html_convert(struct content *c, int width, int height) return false; } - binding_parse_completed(c->data.html.parser_binding); + err = binding_parse_completed(c->data.html.parser_binding); + if (err != BINDING_OK) { + union content_msg_data msg_data; + + msg_data.error = messages_get("NoMemory"); + content_broadcast(c, CONTENT_MSG_ERROR, msg_data); + + return false; + } + c->data.html.document = binding_get_document(c->data.html.parser_binding); /*xmlDebugDumpDocument(stderr, c->data.html.document);*/ diff --git a/render/hubbub_binding.c b/render/hubbub_binding.c index 7d06dd02a..be90ef522 100644 --- a/render/hubbub_binding.c +++ b/render/hubbub_binding.c @@ -213,7 +213,7 @@ binding_error binding_parse_chunk(void *ctx, const uint8_t *data, size_t len) if (err == HUBBUB_ENCODINGCHANGE) return BINDING_ENCODINGCHANGE; - return BINDING_OK; + return err == HUBBUB_NOMEM ? BINDING_NOMEM : BINDING_OK; } binding_error binding_parse_completed(void *ctx) @@ -222,9 +222,8 @@ binding_error binding_parse_completed(void *ctx) hubbub_error error; error = hubbub_parser_completed(c->parser); - /** \todo error handling */ - return BINDING_OK; + return error == HUBBUB_NOMEM ? BINDING_NOMEM : BINDING_OK; } const char *binding_get_encoding(void *ctx, binding_encoding_source *source) -- cgit v1.2.3