Skip to content

Commit fbdacc0

Browse files
pblottierenyalldawson
authored andcommitted
Fixes segfault when filter is empty
1 parent 04f8ee8 commit fbdacc0

File tree

4 files changed

+48
-1
lines changed

4 files changed

+48
-1
lines changed

src/server/services/wms/qgswmsrenderer.cpp

+5-1
Original file line numberDiff line numberDiff line change
@@ -2799,7 +2799,11 @@ namespace QgsWms
27992799
}
28002800
QDomElement filterElem = filterXml.firstChildElement();
28012801
std::unique_ptr<QgsExpression> expression( QgsOgcUtils::expressionFromOgcFilter( filterElem, filteredLayer ) );
2802-
mFeatureFilter.setFilter( filteredLayer, *expression );
2802+
2803+
if ( expression )
2804+
{
2805+
mFeatureFilter.setFilter( filteredLayer, *expression );
2806+
}
28032807
}
28042808
else
28052809
{

tests/src/python/test_qgsserver_wms_getmap.py

+43
Original file line numberDiff line numberDiff line change
@@ -800,6 +800,49 @@ def test_wms_getmap_filter_ogc(self):
800800
r, h = self._result(self._execute_request(qs))
801801
self._img_diff_error(r, h, "WMS_GetMap_Filter_OGC")
802802

803+
# empty filter
804+
filter = ("(<ogc:Filter xmlns=\"http://www.opengis.net/ogc\">"
805+
"</ogc:Filter>)")
806+
qs = "?" + "&".join(["%s=%s" % i for i in list({
807+
"MAP": urllib.parse.quote(self.projectPath),
808+
"SERVICE": "WMS",
809+
"VERSION": "1.1.1",
810+
"REQUEST": "GetMap",
811+
"LAYERS": "Country,Hello",
812+
"STYLES": "",
813+
"FORMAT": "image/png",
814+
"BBOX": "-16817707,-4710778,5696513,14587125",
815+
"HEIGHT": "500",
816+
"WIDTH": "500",
817+
"CRS": "EPSG:3857",
818+
"FILTER": filter
819+
}.items())])
820+
r, h = self._result(self._execute_request(qs))
821+
self._img_diff_error(r, h, "WMS_GetMap_Filter_OGC2")
822+
823+
# filter on the second layer
824+
filter_hello = ("(<Filter></Filter>)")
825+
filter_country = ("(<Filter><PropertyIsEqualTo><PropertyName>name"
826+
"</PropertyName><Literal>eurasia</Literal>"
827+
"</PropertyIsEqualTo></Filter>)")
828+
filter = "{}{}".format(filter_hello, filter_country)
829+
qs = "?" + "&".join(["%s=%s" % i for i in list({
830+
"MAP": urllib.parse.quote(self.projectPath),
831+
"SERVICE": "WMS",
832+
"VERSION": "1.1.1",
833+
"REQUEST": "GetMap",
834+
"LAYERS": "Hello,Country",
835+
"STYLES": "",
836+
"FORMAT": "image/png",
837+
"BBOX": "-16817707,-4710778,5696513,14587125",
838+
"HEIGHT": "500",
839+
"WIDTH": "500",
840+
"CRS": "EPSG:3857",
841+
"FILTER": filter
842+
}.items())])
843+
r, h = self._result(self._execute_request(qs))
844+
self._img_diff_error(r, h, "WMS_GetMap_Filter_OGC3")
845+
803846
def test_wms_getmap_selection(self):
804847
qs = "?" + "&".join(["%s=%s" % i for i in list({
805848
"MAP": urllib.parse.quote(self.projectPath),
Loading
Loading

0 commit comments

Comments
 (0)