Please sign in to comment.
[Spatialite] Fix crash on iterator closing if connection failed.
If an iterator fails to open the spatialite database (mHandle == nullptr in QgsSpatiaLiteFeatureIterator::QgsSpatiaLiteFeatureIterator() ), a crash will occur at the destruction of the QgsSpatiaLiteFeatureSource, due to the iterator not being removed from the list of active iterators. Currently QgsSpatiaLiteFeatureIterator::close() does not call iteratorClosed() if mHandle is invalid, which later causes QgsAbstractFeatureSource::~QgsAbstractFeatureSource() to try calling the close() method of a now defunct iterator. If not applying the patch, the added test case crashes with: 177: src/providers/spatialite/qgsspatialiteconnection.cpp: 736: (openDb) [1ms] New sqlite connection for /tmp/test.sqlite.corrupt 177: src/providers/spatialite/qgsspatialiteconnection.cpp: 750: (openDb) [1ms] Failure while connecting to: /tmp/test.sqlite.corrupt 177: 177: invalid metadata tables 177: src/core/qgsfeaturerequest.cpp: 259: (~QgsAbstractFeatureSource) [0ms] closing active iterator 177: CMake Error at PyQgsSpatialiteProvider.cmake:22 (MESSAGE): 177: Test failed: Segmentation fault (cherry picked from commit 2b15eaa)
- Loading branch information
Showing with 6 additions and 0 deletions.