Skip to content

Commit 1a1aa62

Browse files
authoredMay 22, 2020
Merge pull request #36648 from uclaros/backport-34368
Backport #34368 to 3.10
2 parents e91e3d0 + 871def2 commit 1a1aa62

File tree

2 files changed

+25
-1
lines changed

2 files changed

+25
-1
lines changed
 

‎src/core/providers/ogr/qgsogrprovider.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4382,7 +4382,10 @@ OGRLayerH QgsOgrProviderUtils::setSubsetString( OGRLayerH layer, GDALDatasetH ds
43824382
}
43834383
else
43844384
{
4385-
OGR_L_SetAttributeFilter( layer, encoding->fromUnicode( subsetString ).constData() );
4385+
if ( OGR_L_SetAttributeFilter( layer, encoding->fromUnicode( subsetString ).constData() ) != OGRERR_NONE )
4386+
{
4387+
return nullptr;
4388+
}
43864389
subsetLayer = layer;
43874390
}
43884391

‎tests/src/python/test_provider_shapefile.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -769,6 +769,27 @@ def _lessdigits(s):
769769
self.assertEqual(_lessdigits(subSet_vl.extent().toString()), filtered_extent)
770770
self.assertNotEqual(_lessdigits(subSet_vl.extent().toString()), unfiltered_extent)
771771

772+
def testMalformedSubsetStrings(self):
773+
"""Test that invalid where clauses always return false"""
774+
775+
testPath = TEST_DATA_DIR + '/' + 'lines.shp'
776+
777+
vl = QgsVectorLayer(testPath, 'subset_test', 'ogr')
778+
self.assertTrue(vl.isValid())
779+
self.assertTrue(vl.setSubsetString(''))
780+
self.assertTrue(vl.setSubsetString('"Name" = \'Arterial\''))
781+
self.assertTrue(vl.setSubsetString('select * from lines where "Name" = \'Arterial\''))
782+
self.assertFalse(vl.setSubsetString('this is invalid sql'))
783+
self.assertFalse(vl.setSubsetString('select * from lines where "NonExistentField" = \'someValue\''))
784+
self.assertFalse(vl.setSubsetString('select * from lines where "Name" = \'Arte...'))
785+
self.assertFalse(vl.setSubsetString('select * from lines where "Name" in (\'Arterial\', \'Highway\' '))
786+
self.assertFalse(vl.setSubsetString('select * from NonExistentTable'))
787+
self.assertFalse(vl.setSubsetString('select NonExistentField from lines'))
788+
self.assertFalse(vl.setSubsetString('"NonExistentField" = \'someValue\''))
789+
self.assertFalse(vl.setSubsetString('"Name" = \'Arte...'))
790+
self.assertFalse(vl.setSubsetString('"Name" in (\'Arterial\', \'Highway\' '))
791+
self.assertTrue(vl.setSubsetString(''))
792+
772793
def testMultipatch(self):
773794
"""Check that we can deal with multipatch shapefiles, returned natively by OGR as GeometryCollection of TIN"""
774795

0 commit comments

Comments
 (0)
Please sign in to comment.