Skip to content

Commit cb308b9

Browse files
committedJun 25, 2021
Server WMS getfeatureinfo: throw on invalid filter
Fixes #43849
1 parent f14e098 commit cb308b9

File tree

2 files changed

+23
-1
lines changed

2 files changed

+23
-1
lines changed
 

‎src/server/services/wms/qgswmsrenderer.cpp

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3031,7 +3031,15 @@ namespace QgsWms
30313031
newSubsetString.prepend( filteredLayer->subsetString() );
30323032
newSubsetString.prepend( "(" );
30333033
}
3034-
filteredLayer->setSubsetString( newSubsetString );
3034+
if ( ! filteredLayer->setSubsetString( newSubsetString ) )
3035+
{
3036+
QgsMessageLog::logMessage( QStringLiteral( "Error setting subset string from filter for layer %1, filter: %2" ).arg( layer->name(), newSubsetString ),
3037+
QStringLiteral( "Server" ),
3038+
Qgis::MessageLevel::Warning );
3039+
throw QgsBadRequestException( QgsServiceException::QGIS_InvalidParameterValue,
3040+
QStringLiteral( "Filter not valid for layer %1: check the filter syntax and the field names." ).arg( layer->name() ) );
3041+
3042+
}
30353043
}
30363044
}
30373045

‎tests/src/python/test_qgsserver_wms_getfeatureinfo.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -829,6 +829,20 @@ def testGetFeatureInfoRasterNoData(self):
829829
'test_raster_nodata.qgz',
830830
raw=True)
831831

832+
def test_wrong_filter_throws(self):
833+
"""Test that a wrong FILTER expression throws an InvalidParameterValue exception"""
834+
835+
_, response_body, _ = self.wms_request(
836+
'GetFeatureInfo',
837+
'&layers=testlayer%20%C3%A8%C3%A9&' +
838+
'INFO_FORMAT=text%2Fxml&' +
839+
'width=600&height=400&srs=EPSG%3A3857&' +
840+
'query_layers=testlayer%20%C3%A8%C3%A9&' +
841+
'FEATURE_COUNT=10&FILTER=testlayer%20%C3%A8%C3%A9' +
842+
urllib.parse.quote(':"XXXXXXXXXNAMEXXXXXXX" = \'two\''))
843+
844+
self.assertEqual(response_body.decode('utf8'), '<ServiceExceptionReport xmlns="http://www.opengis.net/ogc" version="1.3.0">\n <ServiceException code="InvalidParameterValue">Filter not valid for layer testlayer èé: check the filter syntax and the field names.</ServiceException>\n</ServiceExceptionReport>\n')
845+
832846

833847
if __name__ == '__main__':
834848
unittest.main()

0 commit comments

Comments
 (0)
Please sign in to comment.