Package: release.debian.org Severity: normal X-Debbugs-Cc: kweatherc...@packages.debian.org, Debian Qt/KDE Maintainers <debian-qt-kde@lists.debian.org> Control: affects -1 + src:kweathercore User: release.debian....@packages.debian.org Usertags: unblock
Dear Release Team, please unblock package kweathercore. [ Reason ] It contains the following changes: * New upstream release (25.04.1). - Harden the CAP polygon parser against creative input. - Fix: Add virtual destructor for ReplyPrivate. [ Tests ] - Upstream test suite passes in sbuild. [ Risks ] Upstream point releases only contain targetted commits. Further fixes can easily be backported or the changes reverted. [ Checklist ] [x] all changes are documented in the d/changelog [x] I reviewed all changes and I approve them [x] attach debdiff against the package in testing Thanks! unblock kweathercore/25.04.2-1
diff -Nru kweathercore-25.04.0/autotests/capdata/il-488abaaf-cad5-4d2b-93b2-703016878453.xml kweathercore-25.04.2/autotests/capdata/il-488abaaf-cad5-4d2b-93b2-703016878453.xml --- kweathercore-25.04.0/autotests/capdata/il-488abaaf-cad5-4d2b-93b2-703016878453.xml 1970-01-01 01:00:00.000000000 +0100 +++ kweathercore-25.04.2/autotests/capdata/il-488abaaf-cad5-4d2b-93b2-703016878453.xml 2025-06-02 22:02:13.000000000 +0200 @@ -0,0 +1,103 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<alert xmlns="urn:oasis:names:tc:emergency:cap:1.2"> + <identifier>2.49.0.0.376.0.250306145512.48636</identifier> + <sender>ims.gov.il</sender> + <sent>2025-03-06T14:55:12+02:00</sent> + <status>Actual</status> + <msgType>Alert</msgType> + <scope>Public</scope> + <info> + <language>en-GB</language> + <category>Met</category> + <event>FLOOD</event> + <urgency>Future</urgency> + <severity>Severe</severity> + <certainty>Possible</certainty> + <effective>2025-03-06T14:55:12+02:00</effective> + <onset>2025-03-06T22:00:00+02:00</onset> + <expires>2025-03-07T14:00:00+02:00</expires> + <senderName>Israel Meteorological Service</senderName> + <headline>Flash Floods</headline> + <description>Yellow Early Warning of FLASH FLOODS in Judea Desert Dead Sea, in North Eastern Negev and in Northern Arava from 06/03 22 until 07/03 14 LT. For further details: https://ims.gov.il/he/IMSwarnings .</description> + <web>https://ims.gov.il/en/IMSWarnings</web> + <parameter> + <valueName>awareness_level</valueName> + <value>2; yellow; Moderate</value> + </parameter> + <parameter> + <valueName>awareness_type</valueName> + <value>12; flooding</value> + </parameter> + <area> + <areaDesc>South Judea Desert Dead Sea</areaDesc> + <polygon/> + <geocode> + <valueName>EMMA_ID</valueName> + <value>IL043</value> + </geocode> + </area> + <area> + <areaDesc>North Eastern Negev</areaDesc> + <polygon/> + <geocode> + <valueName>EMMA_ID</valueName> + <value>IL042</value> + </geocode> + </area> + <area> + <areaDesc>Northern Arava</areaDesc> + <polygon/> + <geocode> + <valueName>EMMA_ID</valueName> + <value>IL045</value> + </geocode> + </area> + </info> + <info> + <language>he-IL</language> + <category>Met</category> + <event>FLOOD</event> + <urgency>Future</urgency> + <severity>Severe</severity> + <certainty>Possible</certainty> + <effective>2025-03-06T14:55:12+02:00</effective> + <onset>2025-03-06T22:00:00+02:00</onset> + <expires>2025-03-07T14:00:00+02:00</expires> + <senderName>Israel Meteorological Service</senderName> + <headline>שטפונות בזק</headline> + <description>התראה מוקדמת צהובה על שטפונות בזק במדבר יהודה וים המלח, בצפון מזרח הנגב ובצפון הערבה מ-06/03 ב-22 עד 07/03 ב-14. באזורים המצויינים קיים חשש משטפונות בזק מקומיים בשל ממטרים מקומיים בשעות המצויינות. לפרטים נוספים: https://ims.gov.il/he/IMSwarnings .</description> + <web>https://ims.gov.il/he/IMSWarnings</web> + <parameter> + <valueName>awareness_level</valueName> + <value>2; yellow; Moderate</value> + </parameter> + <parameter> + <valueName>awareness_type</valueName> + <value>12; flooding</value> + </parameter> + <area> + <areaDesc>South Judea Desert Dead Sea</areaDesc> + <polygon/> + <geocode> + <valueName>EMMA_ID</valueName> + <value>IL043</value> + </geocode> + </area> + <area> + <areaDesc>North Eastern Negev</areaDesc> + <polygon/> + <geocode> + <valueName>EMMA_ID</valueName> + <value>IL042</value> + </geocode> + </area> + <area> + <areaDesc>Northern Arava</areaDesc> + <polygon/> + <geocode> + <valueName>EMMA_ID</valueName> + <value>IL045</value> + </geocode> + </area> + </info> +</alert> diff -Nru kweathercore-25.04.0/autotests/capdata/mo-cap_monsoon.xml kweathercore-25.04.2/autotests/capdata/mo-cap_monsoon.xml --- kweathercore-25.04.0/autotests/capdata/mo-cap_monsoon.xml 1970-01-01 01:00:00.000000000 +0100 +++ kweathercore-25.04.2/autotests/capdata/mo-cap_monsoon.xml 2025-06-02 22:02:13.000000000 +0200 @@ -0,0 +1,256 @@ +<?xml version="1.0" encoding="UTF-8"?> +<alert xmlns="urn:oasis:names:tc:emergency:cap:1.2"> +<identifier>SMG-Weather_MS_2025_006_03</identifier> +<sender>me...@smg.gov.mo</sender> +<sent>2025-04-13T05:52:12+08:00</sent> +<status>Actual</status> +<msgType>Update</msgType> +<scope>Public</scope> +<references>me...@smg.gov.mo,SMG-Weather_MS_2025_006_03,2025-04-13T05:52:12+08:00</references> +<info> +<language>zh-mo</language> +<category>Met</category> +<event>強烈季候風信號</event> +<responseType>AllClear</responseType> +<urgency>Past</urgency> +<severity>Moderate</severity> +<certainty>Observed</certainty> +<effective>2025-04-13T06:00:00+08:00</effective> +<senderName>澳門特別行政區政府地球物理氣象局</senderName> +<headline>強烈季候風(即黑球)信號於 2025年04月13日06時00分 取消。</headline> +<description>強烈季候風(即黑球)信號於 2025年04月13日06時00分 取消。</description> +<instruction></instruction> +<web>https://www.smg.gov.mo/zh/subpage/35/monsoon-main</web> +<contact>me...@smg.gov.mo</contact> +<area> + <areaDesc>澳門特別行政區行政區域圖</areaDesc> + <polygon>22.0766,113.5709 + 22.0766,113.6102 + 22.1088,113.6301 + 22.1656,113.6301 + 22.2041,113.6052 + 22.2040,113.5710 + 22.2090,113.5689 + 22.2122,113.5622 + 22.2160,113.5520 + 22.2153,113.5509 + 22.2155,113.5507 + 22.2156,113.5507 + 22.2170,113.5508 + 22.2169,113.5500 + 22.2167,113.5496 + 22.2166,113.5492 + 22.2166,113.5487 + 22.2166,113.5477 + 22.2165,113.5476 + 22.2167,113.5470 + 22.2167,113.5465 + 22.2167,113.5465 + 22.2168,113.5454 + 22.2169,113.5451 + 22.2169,113.5443 + 22.2163,113.5433 + 22.2144,113.5424 + 22.2142,113.5424 + 22.2136,113.5420 + 22.2136,113.5419 + 22.2132,113.5417 + 22.2133,113.5415 + 22.2130,113.5413 + 22.2130,113.5411 + 22.2130,113.5409 + 22.2136,113.5381 + 22.2136,113.5363 + 22.2135,113.5357 + 22.2134,113.5354 + 22.2134,113.5352 + 22.2135,113.5349 + 22.2123,113.5330 + 22.2096,113.5339 + 22.2073,113.5346 + 22.2066,113.5353 + 22.2023,113.5356 + 22.1945,113.5336 + 22.1885,113.5292 + 22.1879,113.5301 + 22.1865,113.5291 + 22.1845,113.5283 + 22.1821,113.5281 + 22.1770,113.5294 + 22.1754,113.5305 + 22.1733,113.5319 + 22.1720,113.5321 + 22.1570,113.5395 + 22.1507,113.5452 + 22.1453,113.5495 + 22.1155,113.5483 + 22.1088,113.5496 + 22.0988,113.5709 + 22.0766,113.5709</polygon> +</area> +</info> +<info> +<language>pt-PT</language> +<category>Met</category> +<event>VENTOS FORTES DE MONÇÃO</event> +<responseType>AllClear</responseType> +<urgency>Past</urgency> +<severity>Moderate</severity> +<certainty>Observed</certainty> +<effective>2025-04-13T06:00:00+08:00</effective> +<senderName>DIRECÇÃO DOS SERVIÇOS METEOROLÓGICOS E GEOFÍSICOS</senderName> +<headline>O sinal de ventos fortes de monção(bola preta) foi cancelado às 06:00, de 13-04-2025.</headline> +<description>O sinal de ventos fortes de monção(bola preta) foi cancelado às 06:00, de 13-04-2025.</description> +<instruction></instruction> +<web>https://www.smg.gov.mo/pt/subpage/35/monsoon-main</web> +<contact>me...@smg.gov.mo</contact> +<area> + <areaDesc>Mapa da Divisão Administrativa da RAEM</areaDesc> + <polygon>22.0766,113.5709 + 22.0766,113.6102 + 22.1088,113.6301 + 22.1656,113.6301 + 22.2041,113.6052 + 22.2040,113.5710 + 22.2090,113.5689 + 22.2122,113.5622 + 22.2160,113.5520 + 22.2153,113.5509 + 22.2155,113.5507 + 22.2156,113.5507 + 22.2170,113.5508 + 22.2169,113.5500 + 22.2167,113.5496 + 22.2166,113.5492 + 22.2166,113.5487 + 22.2166,113.5477 + 22.2165,113.5476 + 22.2167,113.5470 + 22.2167,113.5465 + 22.2167,113.5465 + 22.2168,113.5454 + 22.2169,113.5451 + 22.2169,113.5443 + 22.2163,113.5433 + 22.2144,113.5424 + 22.2142,113.5424 + 22.2136,113.5420 + 22.2136,113.5419 + 22.2132,113.5417 + 22.2133,113.5415 + 22.2130,113.5413 + 22.2130,113.5411 + 22.2130,113.5409 + 22.2136,113.5381 + 22.2136,113.5363 + 22.2135,113.5357 + 22.2134,113.5354 + 22.2134,113.5352 + 22.2135,113.5349 + 22.2123,113.5330 + 22.2096,113.5339 + 22.2073,113.5346 + 22.2066,113.5353 + 22.2023,113.5356 + 22.1945,113.5336 + 22.1885,113.5292 + 22.1879,113.5301 + 22.1865,113.5291 + 22.1845,113.5283 + 22.1821,113.5281 + 22.1770,113.5294 + 22.1754,113.5305 + 22.1733,113.5319 + 22.1720,113.5321 + 22.1570,113.5395 + 22.1507,113.5452 + 22.1453,113.5495 + 22.1155,113.5483 + 22.1088,113.5496 + 22.0988,113.5709 + 22.0766,113.5709</polygon> +</area> +</info> +<info> +<language>en-US</language> +<category>Met</category> +<event>STRONG MONSOON SIGNAL</event> +<responseType>AllClear</responseType> +<urgency>Past</urgency> +<severity>Moderate</severity> +<certainty>Observed</certainty> +<effective>2025-04-13T06:00:00+08:00</effective> +<senderName>Macao Meteorological and Geophysical Bureau</senderName> +<headline>Strong monsoon signal(Black ball) was cancelled at 2025-04-13 06:00.</headline> +<description>Strong monsoon signal(Black ball) was cancelled at 2025-04-13 06:00.</description> +<instruction></instruction> +<web>https://www.smg.gov.mo/en/subpage/35/monsoon-main</web> +<contact>me...@smg.gov.mo</contact> +<area> + <areaDesc>Macao Special Administrative Region Administrative Area Map</areaDesc> + <polygon>22.0766,113.5709 + 22.0766,113.6102 + 22.1088,113.6301 + 22.1656,113.6301 + 22.2041,113.6052 + 22.2040,113.5710 + 22.2090,113.5689 + 22.2122,113.5622 + 22.2160,113.5520 + 22.2153,113.5509 + 22.2155,113.5507 + 22.2156,113.5507 + 22.2170,113.5508 + 22.2169,113.5500 + 22.2167,113.5496 + 22.2166,113.5492 + 22.2166,113.5487 + 22.2166,113.5477 + 22.2165,113.5476 + 22.2167,113.5470 + 22.2167,113.5465 + 22.2167,113.5465 + 22.2168,113.5454 + 22.2169,113.5451 + 22.2169,113.5443 + 22.2163,113.5433 + 22.2144,113.5424 + 22.2142,113.5424 + 22.2136,113.5420 + 22.2136,113.5419 + 22.2132,113.5417 + 22.2133,113.5415 + 22.2130,113.5413 + 22.2130,113.5411 + 22.2130,113.5409 + 22.2136,113.5381 + 22.2136,113.5363 + 22.2135,113.5357 + 22.2134,113.5354 + 22.2134,113.5352 + 22.2135,113.5349 + 22.2123,113.5330 + 22.2096,113.5339 + 22.2073,113.5346 + 22.2066,113.5353 + 22.2023,113.5356 + 22.1945,113.5336 + 22.1885,113.5292 + 22.1879,113.5301 + 22.1865,113.5291 + 22.1845,113.5283 + 22.1821,113.5281 + 22.1770,113.5294 + 22.1754,113.5305 + 22.1733,113.5319 + 22.1720,113.5321 + 22.1570,113.5395 + 22.1507,113.5452 + 22.1453,113.5495 + 22.1155,113.5483 + 22.1088,113.5496 + 22.0988,113.5709 + 22.0766,113.5709</polygon> +</area> +</info> +</alert> diff -Nru kweathercore-25.04.0/autotests/capparsertest.cpp kweathercore-25.04.2/autotests/capparsertest.cpp --- kweathercore-25.04.0/autotests/capparsertest.cpp 2025-04-07 22:47:47.000000000 +0200 +++ kweathercore-25.04.2/autotests/capparsertest.cpp 2025-06-02 22:02:13.000000000 +0200 @@ -12,6 +12,8 @@ #include <QFile> #include <QTest> +using namespace Qt::Literals; + class CapParserTest : public QObject { Q_OBJECT @@ -185,6 +187,48 @@ QCOMPARE(area.altitude(), 0.0f); QCOMPARE(area.ceiling(), 9842.5197f); } + + void testTabCoordinateSeparator() + { + QFile f(QFINDTESTDATA("capdata/mo-cap_monsoon.xml")); + QVERIFY(f.open(QFile::ReadOnly)); + KWeatherCore::CAPParser parser(f.readAll()); + auto alert = parser.parse(); + + QCOMPARE(alert.status(), KWeatherCore::CAPAlertMessage::Status::Actual); + QCOMPARE(alert.messageType(), KWeatherCore::CAPAlertMessage::MessageType::Update); + QCOMPARE(alert.references().size(), 1); + auto ref = alert.references()[0]; + QCOMPARE(ref.sender(), "me...@smg.gov.mo"_L1); + QCOMPARE(ref.identifier(), "SMG-Weather_MS_2025_006_03"_L1); + QCOMPARE(ref.sent(), QDateTime({2025, 4, 13}, {5, 52, 12}, QTimeZone::fromSecondsAheadOfUtc(8 * 60 * 60))); + + QCOMPARE(alert.alertInfos().size(), 3); + const auto info = alert.alertInfos()[0]; + QCOMPARE(info.areas().size(), 1); + const auto area = info.areas()[0]; + QCOMPARE(area.description(), u"澳門特別行政區行政區域圖"); + QCOMPARE(area.polygons().size(), 1); + const auto poly = area.polygons()[0]; + QCOMPARE(poly.size(), 63); + } + + void testEmptyPolygon() + { + QFile f(QFINDTESTDATA("capdata/il-488abaaf-cad5-4d2b-93b2-703016878453.xml")); + QVERIFY(f.open(QFile::ReadOnly)); + KWeatherCore::CAPParser parser(f.readAll()); + auto alert = parser.parse(); + + QCOMPARE(alert.status(), KWeatherCore::CAPAlertMessage::Status::Actual); + QCOMPARE(alert.alertInfos().size(), 2); + const auto info = alert.alertInfos()[0]; + QCOMPARE(info.areas().size(), 3); + const auto area = info.areas()[0]; + QVERIFY(!area.description().isEmpty()); + QCOMPARE(area.geoCodes().size(), 1); + QCOMPARE(area.polygons().size(), 0); + } }; QTEST_GUILESS_MAIN(CapParserTest) diff -Nru kweathercore-25.04.0/CMakeLists.txt kweathercore-25.04.2/CMakeLists.txt --- kweathercore-25.04.0/CMakeLists.txt 2025-04-07 22:47:47.000000000 +0200 +++ kweathercore-25.04.2/CMakeLists.txt 2025-06-02 22:02:13.000000000 +0200 @@ -3,7 +3,7 @@ # KDE Application Version, managed by release script set (RELEASE_SERVICE_VERSION_MAJOR "25") set (RELEASE_SERVICE_VERSION_MINOR "04") -set (RELEASE_SERVICE_VERSION_MICRO "0") +set (RELEASE_SERVICE_VERSION_MICRO "2") set (RELEASE_SERVICE_VERSION "${RELEASE_SERVICE_VERSION_MAJOR}.${RELEASE_SERVICE_VERSION_MINOR}.${RELEASE_SERVICE_VERSION_MICRO}") project(KWeatherCore VERSION ${RELEASE_SERVICE_VERSION}) diff -Nru kweathercore-25.04.0/debian/changelog kweathercore-25.04.2/debian/changelog --- kweathercore-25.04.0/debian/changelog 2025-04-26 01:01:37.000000000 +0200 +++ kweathercore-25.04.2/debian/changelog 2025-06-09 23:00:38.000000000 +0200 @@ -1,3 +1,12 @@ +kweathercore (25.04.2-1) unstable; urgency=medium + + [ Aurélien COUDERC ] + * New upstream release (25.04.1). + - Harden the CAP polygon parser against creative input. + - Fix: Add virtual destructor for ReplyPrivate. + + -- Aurélien COUDERC <couc...@debian.org> Mon, 09 Jun 2025 23:00:38 +0200 + kweathercore (25.04.0-1) unstable; urgency=medium [ Aurélien COUDERC ] diff -Nru kweathercore-25.04.0/src/capparser.cpp kweathercore-25.04.2/src/capparser.cpp --- kweathercore-25.04.0/src/capparser.cpp 2025-04-07 22:47:47.000000000 +0200 +++ kweathercore-25.04.2/src/capparser.cpp 2025-06-02 22:02:13.000000000 +0200 @@ -175,11 +175,29 @@ {"Unlikely", CAPAlertInfo::Certainty::Unlikely}, }; +[[nodiscard]] static QStringView nextCoordinate(QStringView &input) +{ + const auto beginIt = std::find_if(input.constBegin(), input.constEnd(), [](auto c) { + return !c.isSpace(); + }); + if (beginIt == input.constEnd()) { + input = {}; + return {}; + } + const auto endIt = std::find_if(std::next(beginIt), input.constEnd(), [](auto c) { + return c.isSpace(); + }); + auto s = input.sliced(std::distance(input.constBegin(), beginIt), std::distance(beginIt, endIt)); + input.slice(std::distance(input.constBegin(), endIt)); + return s; +} + [[nodiscard]] static CAPPolygon stringToPolygon(QStringView str) { CAPPolygon res; - for (auto coordinate : QStringTokenizer(str, ' '_L1, Qt::SkipEmptyParts)) { + do { + auto coordinate = nextCoordinate(str); const auto idx = coordinate.indexOf(','_L1); if (idx < 0) { continue; @@ -189,7 +207,7 @@ if (!latOk || !lonOk) { res.pop_back(); } - } + } while (!str.isEmpty()); return res; } @@ -400,7 +418,10 @@ } else if (m_xml.name() == QLatin1String("geocode") && !m_xml.isEndElement()) { area.addGeoCode(parseNamedValue()); } else if (m_xml.name() == QLatin1String("polygon") && !m_xml.isEndElement()) { - area.addPolygon(stringToPolygon(m_xml.readElementText())); + auto poly = stringToPolygon(m_xml.readElementText()); + if (poly.size() >= 4) { + area.addPolygon(std::move(poly)); + } } else if (m_xml.name() == QLatin1String("circle") && !m_xml.isEndElement()) { const auto t = m_xml.readElementText(); const auto commaIdx = t.indexOf(QLatin1Char(',')); diff -Nru kweathercore-25.04.0/src/reply_p.h kweathercore-25.04.2/src/reply_p.h --- kweathercore-25.04.0/src/reply_p.h 2025-04-07 22:47:47.000000000 +0200 +++ kweathercore-25.04.2/src/reply_p.h 2025-06-02 22:02:13.000000000 +0200 @@ -16,6 +16,7 @@ class ReplyPrivate { public: + virtual ~ReplyPrivate() = default; void setError(Reply::Error error, const QString &msg = {}); Reply::Error m_error = Reply::NoError;