Skip to content
Permalink
Browse files
Merge pull request #7751 from pblottiere/server_filter_segfault
[server] Fixes segfault when WMS OGC filter is empty
  • Loading branch information
pblottiere committed Sep 7, 2018
2 parents 0ea2831 + a6b44b1 commit 3ad3fc4f9ce1dcbb5493540cad83a47dd52283dd
Show file tree
Hide file tree
Showing 4 changed files with 50 additions and 1 deletion.
@@ -2811,7 +2811,11 @@ namespace QgsWms
}
QDomElement filterElem = filterXml.firstChildElement();
std::unique_ptr<QgsExpression> expression( QgsOgcUtils::expressionFromOgcFilter( filterElem, filteredLayer ) );
mFeatureFilter.setFilter( filteredLayer, *expression );

if ( expression )
{
mFeatureFilter.setFilter( filteredLayer, *expression );
}
}
else
{
@@ -821,6 +821,51 @@ def test_wms_getmap_filter_ogc_with_empty(self):
r, h = self._result(self._execute_request(qs))
self._img_diff_error(r, h, "WMS_GetMap_Filter_OGC")

# empty filter
filter = ("(<ogc:Filter xmlns=\"http://www.opengis.net/ogc\">"
"</ogc:Filter>)")
qs = "?" + "&".join(["%s=%s" % i for i in list({
"MAP": urllib.parse.quote(self.projectPath),
"SERVICE": "WMS",
"VERSION": "1.1.1",
"REQUEST": "GetMap",
"LAYERS": "Country,Hello",
"STYLES": "",
"FORMAT": "image/png",
"BBOX": "-16817707,-4710778,5696513,14587125",
"HEIGHT": "500",
"WIDTH": "500",
"CRS": "EPSG:3857",
"FILTER": filter
}.items())])

r, h = self._result(self._execute_request(qs))
self._img_diff_error(r, h, "WMS_GetMap_Filter_OGC2")

# filter on the second layer
filter_hello = ("(<Filter></Filter>)")
filter_country = ("(<Filter><PropertyIsEqualTo><PropertyName>name"
"</PropertyName><Literal>eurasia</Literal>"
"</PropertyIsEqualTo></Filter>)")
filter = "{}{}".format(filter_hello, filter_country)
qs = "?" + "&".join(["%s=%s" % i for i in list({
"MAP": urllib.parse.quote(self.projectPath),
"SERVICE": "WMS",
"VERSION": "1.1.1",
"REQUEST": "GetMap",
"LAYERS": "Hello,Country",
"STYLES": "",
"FORMAT": "image/png",
"BBOX": "-16817707,-4710778,5696513,14587125",
"HEIGHT": "500",
"WIDTH": "500",
"CRS": "EPSG:3857",
"FILTER": filter
}.items())])

r, h = self._result(self._execute_request(qs))
self._img_diff_error(r, h, "WMS_GetMap_Filter_OGC3")

def test_wms_getmap_selection(self):
qs = "?" + "&".join(["%s=%s" % i for i in list({
"MAP": urllib.parse.quote(self.projectPath),
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit 3ad3fc4

Please sign in to comment.