summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Mark Bell <jmb@netsurf-browser.org>2011-10-08 00:14:14 +0000
committerJohn Mark Bell <jmb@netsurf-browser.org>2011-10-08 00:14:14 +0000
commitac5d2a904c6a25d83ccbb9cf2fb78d9a2896afe2 (patch)
treea090fab5c47b480a97b717570689a7d65d1585ef
parent4cd69b8aa984be12b5513e38c4f6e5ec0da5a06c (diff)
downloadnetsurf-ac5d2a904c6a25d83ccbb9cf2fb78d9a2896afe2.tar.gz
netsurf-ac5d2a904c6a25d83ccbb9cf2fb78d9a2896afe2.tar.bz2
Improve error handling
svn path=/trunk/netsurf/; revision=12998
-rw-r--r--render/html.c34
1 files changed, 15 insertions, 19 deletions
diff --git a/render/html.c b/render/html.c
index 09efb3600..d9e6c4834 100644
--- a/render/html.c
+++ b/render/html.c
@@ -743,7 +743,7 @@ void html_box_convert_done(html_content *c, bool success)
/** process link node */
static bool html_process_link(html_content *c, xmlNode *node)
{
- struct content_rfc5988_link *link;
+ struct content_rfc5988_link link;
char *xmlstr;
nserror error;
lwc_string *rel;
@@ -754,7 +754,10 @@ static bool html_process_link(html_content *c, xmlNode *node)
if (xmlstr == NULL) {
return false;
}
- lwc_intern_string(xmlstr, strlen(xmlstr), &rel);
+ if (lwc_intern_string(xmlstr, strlen(xmlstr), &rel) != lwc_error_ok) {
+ xmlFree(xmlstr);
+ return false;
+ }
xmlFree(xmlstr);
/* check that the href exists - w3c spec says must be present */
@@ -769,45 +772,38 @@ static bool html_process_link(html_content *c, xmlNode *node)
return false;
}
- link = calloc(1, sizeof(struct content_rfc5988_link));
- if (link == NULL) {
- lwc_string_unref(rel);
- nsurl_unref(href);
- return false;
- }
- link->rel = rel;
- link->href = href;
+ memset(&link, 0, sizeof(struct content_rfc5988_link));
+
+ link.rel = rel;
+ link.href = href;
- /* look for optional properties */
+ /* look for optional properties -- we don't care if internment fails */
xmlstr = (char *)xmlGetProp(node, (const xmlChar *) "hreflang");
if (xmlstr != NULL) {
- lwc_intern_string(xmlstr, strlen(xmlstr), &link->hreflang);
+ lwc_intern_string(xmlstr, strlen(xmlstr), &link.hreflang);
xmlFree(xmlstr);
}
xmlstr = (char *) xmlGetProp(node, (const xmlChar *) "type");
if (xmlstr != NULL) {
- lwc_intern_string(xmlstr, strlen(xmlstr), &link->type);
+ lwc_intern_string(xmlstr, strlen(xmlstr), &link.type);
xmlFree(xmlstr);
}
xmlstr = (char *) xmlGetProp(node, (const xmlChar *) "media");
if (xmlstr != NULL) {
- lwc_intern_string(xmlstr, strlen(xmlstr), &link->media);
+ lwc_intern_string(xmlstr, strlen(xmlstr), &link.media);
xmlFree(xmlstr);
}
xmlstr = (char *) xmlGetProp(node, (const xmlChar *) "sizes");
if (xmlstr != NULL) {
- lwc_intern_string(xmlstr, strlen(xmlstr), &link->sizes);
+ lwc_intern_string(xmlstr, strlen(xmlstr), &link.sizes);
xmlFree(xmlstr);
}
/* add to content */
- content__add_rfc5988_link(&c->base, link);
-
- /* release this copy */
- content__free_rfc5988_link(link);
+ content__add_rfc5988_link(&c->base, &link);
return true;
}