diff options
author | John Mark Bell <jmb@netsurf-browser.org> | 2011-10-08 00:14:14 +0000 |
---|---|---|
committer | John Mark Bell <jmb@netsurf-browser.org> | 2011-10-08 00:14:14 +0000 |
commit | ac5d2a904c6a25d83ccbb9cf2fb78d9a2896afe2 (patch) | |
tree | a090fab5c47b480a97b717570689a7d65d1585ef | |
parent | 4cd69b8aa984be12b5513e38c4f6e5ec0da5a06c (diff) | |
download | netsurf-ac5d2a904c6a25d83ccbb9cf2fb78d9a2896afe2.tar.gz netsurf-ac5d2a904c6a25d83ccbb9cf2fb78d9a2896afe2.tar.bz2 |
Improve error handling
svn path=/trunk/netsurf/; revision=12998
-rw-r--r-- | render/html.c | 34 |
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; } |