talons

Fork of Claws Mail https://www.claws-mail
Log | Files | Refs | README | LICENSE

commit 4f09c01265edb0f7c4cd3f8f205f960277900994
parent 76d37e0ac4cb6a451e44523f76201d7d57d45799
Author: Andrej Kacian <ticho@claws-mail.org>
Date:   Fri, 25 Jul 2014 14:45:11 +0200

RSSyl: Fix Atom parser getting lost within feed/author.

Diffstat:
Msrc/plugins/rssyl/libfeed/parser_atom10.c | 23+++++++++++++++--------
1 file changed, 15 insertions(+), 8 deletions(-)

diff --git a/src/plugins/rssyl/libfeed/parser_atom10.c b/src/plugins/rssyl/libfeed/parser_atom10.c @@ -51,10 +51,13 @@ void feed_parser_atom10_start(void *data, const gchar *el, const gchar **attr) } else if( ctx->depth == 2 ) { - /* This should only happen with malformed atom feeds - we're in - * XML depth 2, but not inside an <entry> block. */ - if (ctx->curitem == NULL) + /* Make sure we are in one of known locations within the XML structure. + * This condition should never be true on a valid Atom feed. */ + if (ctx->location != FEED_LOC_ATOM10_AUTHOR && + ctx->location != FEED_LOC_ATOM10_ENTRY) { + ctx->depth++; return; + } if( !strcmp(el, "author") ) { /* Start of author info for current feed item. @@ -101,11 +104,13 @@ void feed_parser_atom10_end(void *data, const gchar *el) else text = ""; - ctx->depth--; - switch( ctx->depth ) { case 0: + /* Just in case. */ + break; + + case 1: if( !strcmp(el, "feed") ) { /* We have finished parsing the feed, reverse the list @@ -115,7 +120,7 @@ void feed_parser_atom10_end(void *data, const gchar *el) break; - case 1: + case 2: /* decide if we just received </entry>, so we can * add a complete item to feed */ @@ -142,7 +147,7 @@ void feed_parser_atom10_end(void *data, const gchar *el) break; - case 2: + case 3: if( ctx->curitem == NULL ) break; @@ -189,7 +194,7 @@ void feed_parser_atom10_end(void *data, const gchar *el) break; - case 3: + case 4: if( ctx->curitem == NULL ) break; @@ -234,4 +239,6 @@ void feed_parser_atom10_end(void *data, const gchar *el) ctx->str = NULL; } ctx->str = NULL; + + ctx->depth--; }