From 29b7586b7b6ffb8771881574a06a3c37ddf6a116 Mon Sep 17 00:00:00 2001 From: Art Cancro Date: Sun, 4 Nov 2007 03:55:10 +0000 Subject: [PATCH] Handle NULL data from XML parser in order to cope with the Homeland Stupidity RSS feed, which IO deliberately configured in such a way to crash Citadel and prove that our parser wasn't yet ready for prime time. :) --- citadel/modules/rssclient/serv_rssclient.c | 12 ++++++------ citadel/tools.c | 2 ++ 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/citadel/modules/rssclient/serv_rssclient.c b/citadel/modules/rssclient/serv_rssclient.c index 906e2787c..8ba42762c 100644 --- a/citadel/modules/rssclient/serv_rssclient.c +++ b/citadel/modules/rssclient/serv_rssclient.c @@ -252,35 +252,35 @@ void rss_xml_end(void *data, const char *supplied_el) { strcpy(el, ++sep); } - if ( (!strcasecmp(el, "title")) && (ri->item_tag_nesting == 0) ) { + if ( (!strcasecmp(el, "title")) && (ri->item_tag_nesting == 0) && (ri->chardata != NULL) ) { safestrncpy(ri->channel_title, ri->chardata, sizeof ri->channel_title); striplt(ri->channel_title); } - if (!strcasecmp(el, "guid")) { + if ( (!strcasecmp(el, "guid")) && (ri->chardata != NULL) ) { if (ri->guid != NULL) free(ri->guid); striplt(ri->chardata); ri->guid = strdup(ri->chardata); } - if (!strcasecmp(el, "title")) { + if ( (!strcasecmp(el, "title")) && (ri->chardata != NULL) ) { if (ri->title != NULL) free(ri->title); striplt(ri->chardata); ri->title = strdup(ri->chardata); } - if (!strcasecmp(el, "link")) { + if ( (!strcasecmp(el, "link")) && (ri->chardata != NULL) ) { if (ri->link != NULL) free(ri->link); striplt(ri->chardata); ri->link = strdup(ri->chardata); } - if (!strcasecmp(el, "description")) { + if ( (!strcasecmp(el, "description")) && (ri->chardata != NULL) ) { if (ri->description != NULL) free(ri->description); ri->description = strdup(ri->chardata); } - if ( (!strcasecmp(el, "pubdate")) || (!strcasecmp(el, "date")) ) { + if ( ((!strcasecmp(el, "pubdate")) || (!strcasecmp(el, "date"))) && (ri->chardata != NULL) ) { striplt(ri->chardata); ri->pubdate = rdf_parsedate(ri->chardata); } diff --git a/citadel/tools.c b/citadel/tools.c index cd8f1510d..725b9daed 100644 --- a/citadel/tools.c +++ b/citadel/tools.c @@ -453,6 +453,8 @@ void striplt(char *buf) { size_t len; int a; + + if (buf==NULL) return; if (IsEmptyStr(buf)) return; len = strlen(buf); while ((!IsEmptyStr(buf)) && (isspace(buf[len - 1]))) -- 2.39.2