From 4743ee50ea2a29f5e799c4f32c65f2d8162edaf3 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Thu, 20 May 2021 22:39:47 +0200 Subject: [PATCH] =?UTF-8?q?[WMS=20provider]=C2=A0Fix=20crash=20on=20WMS-T?= =?UTF-8?q?=20layer=20uri=20without=20timeDimensionExtent?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes #43158 --- src/providers/wms/qgswmscapabilities.cpp | 3 ++- tests/src/providers/testqgswmsprovider.cpp | 7 +++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/providers/wms/qgswmscapabilities.cpp b/src/providers/wms/qgswmscapabilities.cpp index f484f7ca23f0..fd19da28bbff 100644 --- a/src/providers/wms/qgswmscapabilities.cpp +++ b/src/providers/wms/qgswmscapabilities.cpp @@ -90,7 +90,8 @@ bool QgsWmsSettings::parseUri( const QString &uriString ) mTemporalExtent = uri.param( QStringLiteral( "timeDimensionExtent" ) ); mTimeDimensionExtent = parseTemporalExtent( mTemporalExtent ); - if ( !mTimeDimensionExtent.datesResolutionList.constFirst().dates.dateTimes.empty() ) + if ( !mTimeDimensionExtent.datesResolutionList.isEmpty() && + !mTimeDimensionExtent.datesResolutionList.constFirst().dates.dateTimes.empty() ) { QDateTime begin = mTimeDimensionExtent.datesResolutionList.constFirst().dates.dateTimes.first(); QDateTime end = mTimeDimensionExtent.datesResolutionList.constLast().dates.dateTimes.last(); diff --git a/tests/src/providers/testqgswmsprovider.cpp b/tests/src/providers/testqgswmsprovider.cpp index ce42a2a2cd1f..78e7bd698c30 100644 --- a/tests/src/providers/testqgswmsprovider.cpp +++ b/tests/src/providers/testqgswmsprovider.cpp @@ -257,6 +257,13 @@ class TestQgsWmsProvider: public QObject return myResultFlag; } + void testParseWmstUriWithoutTemporalExtent() + { + // test fix for https://github.com/qgis/QGIS/issues/43158 + // we just check we don't crash + QgsWmsProvider provider( QStringLiteral( "allowTemporalUpdates=true&temporalSource=provider&type=wmst&layers=foostyles=bar&crs=EPSG:3857&format=image/png&url=file:///dummy" ), QgsDataProvider::ProviderOptions(), mCapabilities ); + } + private: QgsWmsCapabilities *mCapabilities = nullptr;