Taken from https://github.com/qgis/QGIS/pull/61690 From 579241435198146eb27dc33b32566b1dfc4c18cc Mon Sep 17 00:00:00 2001 From: Julien Cabieces Date: Wed, 30 Apr 2025 18:04:34 +0200 Subject: [PATCH 1/2] fix(WMSGetMap): fix Qt6 filter read Since Qt6 Undeclared namespace prefixes are no longer allowed (see https://doc.qt.io/qt-6/xml-changes-qt6.html#qdom-and-qdomdocument), we need to define fes filter in case it would be empty. --- src/server/services/wms/qgswmsrenderer.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/server/services/wms/qgswmsrenderer.cpp b/src/server/services/wms/qgswmsrenderer.cpp index fe4952496611..22957c9637bb 100644 --- a/src/server/services/wms/qgswmsrenderer.cpp +++ b/src/server/services/wms/qgswmsrenderer.cpp @@ -78,6 +78,7 @@ #include #include #include +#include #include //for printing @@ -3558,10 +3559,20 @@ namespace QgsWms // OGC filter QDomDocument filterXml; QString errorMsg; + +#if QT_VERSION < QT_VERSION_CHECK( 6, 5, 0 ) if ( !filterXml.setContent( filter.mFilter, true, &errorMsg ) ) { throw QgsBadRequestException( QgsServiceException::QGIS_InvalidParameterValue, QStringLiteral( "Filter string rejected. Error message: %1. The XML string was: %2" ).arg( errorMsg, filter.mFilter ) ); } +#else + QXmlStreamReader xmlReader( filter.mFilter ); + xmlReader.addExtraNamespaceDeclaration( QXmlStreamNamespaceDeclaration( QStringLiteral( "fes" ), QStringLiteral( "http://www.opengis.net/fes/2.0" ) ) ); + if ( QDomDocument::ParseResult result = filterXml.setContent( &xmlReader, QDomDocument::ParseOption::UseNamespaceProcessing ); !result ) + { + throw QgsBadRequestException( QgsServiceException::QGIS_InvalidParameterValue, QStringLiteral( "Filter string rejected. Error %1:%2 : %3. The XML string was: %4" ).arg( QString::number( result.errorLine ), QString::number( result.errorColumn ), result.errorMessage, filter.mFilter ) ); + } +#endif QDomElement filterElem = filterXml.firstChildElement(); std::unique_ptr filterExp( QgsOgcUtils::expressionFromOgcFilter( filterElem, filter.mVersion, filteredLayer ) ); From f51e0ad45cae6adb7981727799cb461c5944180d Mon Sep 17 00:00:00 2001 From: Julien Cabieces Date: Mon, 5 May 2025 15:44:55 +0200 Subject: [PATCH 2/2] fix(WMSGetMap): fix Qt6 filter read and define ogc namespace in case it is not set in the filter --- src/server/services/wms/qgswmsrenderer.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/server/services/wms/qgswmsrenderer.cpp b/src/server/services/wms/qgswmsrenderer.cpp index 22957c9637bb..05e8dfb949ae 100644 --- a/src/server/services/wms/qgswmsrenderer.cpp +++ b/src/server/services/wms/qgswmsrenderer.cpp @@ -3568,6 +3568,7 @@ namespace QgsWms #else QXmlStreamReader xmlReader( filter.mFilter ); xmlReader.addExtraNamespaceDeclaration( QXmlStreamNamespaceDeclaration( QStringLiteral( "fes" ), QStringLiteral( "http://www.opengis.net/fes/2.0" ) ) ); + xmlReader.addExtraNamespaceDeclaration( QXmlStreamNamespaceDeclaration( QStringLiteral( "ogc" ), QStringLiteral( "http://www.opengis.net/ogc" ) ) ); if ( QDomDocument::ParseResult result = filterXml.setContent( &xmlReader, QDomDocument::ParseOption::UseNamespaceProcessing ); !result ) { throw QgsBadRequestException( QgsServiceException::QGIS_InvalidParameterValue, QStringLiteral( "Filter string rejected. Error %1:%2 : %3. The XML string was: %4" ).arg( QString::number( result.errorLine ), QString::number( result.errorColumn ), result.errorMessage, filter.mFilter ) );