fix icalendar regression

This commit is contained in:
Martin Rotter 2024-03-14 14:55:11 +01:00
parent 25c70b363c
commit c74d24a4ed

View File

@ -58,7 +58,7 @@ QList<StandardFeed*> IcalParser::discoverFeeds(ServiceRoot* root, const QUrl& ur
QPair<StandardFeed*, QList<IconLocation>> IcalParser::guessFeed(const QByteArray& content, QPair<StandardFeed*, QList<IconLocation>> IcalParser::guessFeed(const QByteArray& content,
const QString& content_type) const { 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; Icalendar calendar;
try { try {
@ -174,8 +174,10 @@ QString IcalParser::objMessageRawContents(const QVariant& msg_element) const {
} }
Icalendar::Icalendar(const QByteArray& data) : FeedParser(QString::fromUtf8(data), FeedParser::DataType::Other) { Icalendar::Icalendar(const QByteArray& data) : FeedParser(QString::fromUtf8(data), FeedParser::DataType::Other) {
if (!data.isEmpty()) {
processLines(m_data); processLines(m_data);
} }
}
QString Icalendar::title() const { QString Icalendar::title() const {
return m_title; return m_title;
@ -192,6 +194,10 @@ void Icalendar::processLines(const QString& data) {
auto all_matches = regex.globalMatch(data); auto all_matches = regex.globalMatch(data);
if (!all_matches.hasNext()) {
throw ApplicationException(QObject::tr("required iCal data are missing"));
}
while (all_matches.hasNext()) { while (all_matches.hasNext()) {
auto match = all_matches.next(); auto match = all_matches.next();
QString component = match.captured(1); QString component = match.captured(1);