diff options
author | John Mark Bell <jmb@netsurf-browser.org> | 2008-11-20 14:47:36 +0000 |
---|---|---|
committer | John Mark Bell <jmb@netsurf-browser.org> | 2008-11-20 14:47:36 +0000 |
commit | 3a5d7d6b644fe3dbea04bf9803f7b712832a10a4 (patch) | |
tree | d85ae3da586d5ca470d4367f76ce927460e6b133 | |
parent | dee6f4186452b6f777e368798546ae6a6deae7f5 (diff) | |
download | netsurf-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
-rw-r--r-- | render/html.c | 34 |
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); |