summaryrefslogtreecommitdiff
path: root/render
diff options
context:
space:
mode:
authorJohn Mark Bell <jmb@netsurf-browser.org>2008-11-20 14:47:36 +0000
committerJohn Mark Bell <jmb@netsurf-browser.org>2008-11-20 14:47:36 +0000
commit3a5d7d6b644fe3dbea04bf9803f7b712832a10a4 (patch)
treed85ae3da586d5ca470d4367f76ce927460e6b133 /render
parentdee6f4186452b6f777e368798546ae6a6deae7f5 (diff)
downloadnetsurf-3a5d7d6b644fe3dbea04bf9803f7b712832a10a4.tar.gz
netsurf-3a5d7d6b644fe3dbea04bf9803f7b712832a10a4.tar.bz2
Process error page correctly.
TODO: Why don't *_process_data take a const pointer to the data? svn path=/trunk/netsurf/; revision=5757
Diffstat (limited to 'render')
-rw-r--r--render/html.c34
1 files changed, 31 insertions, 3 deletions
diff --git a/render/html.c b/render/html.c
index 355885b1d..804bdd7c1 100644
--- a/render/html.c
+++ b/render/html.c
@@ -254,9 +254,37 @@ bool html_convert(struct content *c, int width, int height)
/* finish parsing */
if (c->source_size == 0) {
- binding_parse_chunk(c->data.html.parser_binding,
- (uint8_t *) empty_document,
- sizeof empty_document);
+ binding_error err;
+
+ /* Destroy current binding */
+ binding_destroy_tree(c->data.html.parser_binding);
+
+ /* Also, any existing encoding information,
+ * as it's not guaranteed to match the error page.
+ */
+ free(c->data.html.encoding);
+ c->data.html.encoding = NULL;
+
+ /* Create new binding, using default charset */
+ err = binding_create_tree(c, NULL,
+ &c->data.html.parser_binding);
+ if (err != BINDING_OK) {
+ union content_msg_data msg_data;
+
+ if (err == BINDING_BADENCODING) {
+ LOG(("Bad encoding: %s", c->data.html.encoding
+ ? c->data.html.encoding : ""));
+ msg_data.error = messages_get("ParsingFail");
+ } else
+ msg_data.error = messages_get("NoMemory");
+ content_broadcast(c, CONTENT_MSG_ERROR, msg_data);
+ return false;
+ }
+
+ /* Process the error page */
+ if (html_process_data(c, (char *) empty_document,
+ SLEN(empty_document)) == false)
+ return false;
}
binding_parse_completed(c->data.html.parser_binding);