From c74d24a4ed51a0f64cabf7ecc3bc04a88d05333b Mon Sep 17 00:00:00 2001 From: Martin Rotter Date: Thu, 14 Mar 2024 14:55:11 +0100 Subject: [PATCH] fix icalendar regression --- .../services/standard/parsers/icalparser.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/librssguard/services/standard/parsers/icalparser.cpp b/src/librssguard/services/standard/parsers/icalparser.cpp index 0cc941412..18c08bc81 100644 --- a/src/librssguard/services/standard/parsers/icalparser.cpp +++ b/src/librssguard/services/standard/parsers/icalparser.cpp @@ -58,7 +58,7 @@ QList IcalParser::discoverFeeds(ServiceRoot* root, const QUrl& ur QPair> IcalParser::guessFeed(const QByteArray& content, const QString& content_type) const { - if (content_type.contains(QSL("text/calendar")) || content.contains("\r\n")) { + if (content_type.contains(QSL("text/calendar")) || content.startsWith(QSL("BEGIN").toLocal8Bit())) { Icalendar calendar; try { @@ -174,7 +174,9 @@ QString IcalParser::objMessageRawContents(const QVariant& msg_element) const { } Icalendar::Icalendar(const QByteArray& data) : FeedParser(QString::fromUtf8(data), FeedParser::DataType::Other) { - processLines(m_data); + if (!data.isEmpty()) { + processLines(m_data); + } } QString Icalendar::title() const { @@ -192,6 +194,10 @@ void Icalendar::processLines(const QString& data) { auto all_matches = regex.globalMatch(data); + if (!all_matches.hasNext()) { + throw ApplicationException(QObject::tr("required iCal data are missing")); + } + while (all_matches.hasNext()) { auto match = all_matches.next(); QString component = match.captured(1); @@ -355,7 +361,7 @@ QDateTime EventComponent::startsOn(const QMap& time_zones, b return dat; } -QDateTime EventComponent::endsOn(const QMap& time_zones, bool *had_dt) const { +QDateTime EventComponent::endsOn(const QMap& time_zones, bool* had_dt) const { QString modifiers; QString dt_format; bool has_dt;