[gdal-dev] QGIS crashes in ogrsqlitevirtualogr.cpp::OGR2SQLITE_Register

Sandro Mani manisandro at gmail.com
Thu Dec 4 13:50:05 PST 2014


Hi,

QGIS is currently crashing in Fedora 21+ when listing the supported ogr 
drivers. In QgsVectorFileWriter::ogrDriverList, there is a portion of code

// Unfortunately it seems that there is no simple way to detect if
// OGR SQLite driver is compiled with SpatiaLite support.
// We have HAVE_SPATIALITE in QGIS, but that may differ from OGR
// http://lists.osgeo.org/pipermail/gdal-dev/2012-November/034580.html
// -> test if creation failes
[...]
OGRDataSourceH ds = OGR_Dr_CreateDataSource( poDriver, TO8F( QString( 
"/vsimem/spatialitetest.sqlite" ) ), options );

which then (see stack trace below) ends up calling OGR2SQLITE_Register, 
which itself calls sqlite3_auto_extension which is a macro defined as 
sqlite3_api->auto_extension. This last call crashes because sqlite3_api 
is null.

Reading the code it looks like the only way for sqlite3_api to be 
initialized is via ogrsqlitevirtualogr.cpp::sqlite3_extension_init, 
which is supposedly called when loading the extension via SQLite. I 
don't see sqlite3_extension_init being called otherwise, so I wonder 
whether this is a bug in ogr, or whether QGIS is doing something it 
shouldn't.

The backtrace is:

(gdb) bt
#0  0x00007ffff4ad36ce in OGR2SQLITE_Register() () at 
ogrsqlitevirtualogr.cpp:2460
#1  0x00007ffff4ab0148 in OGRSQLiteDataSource::OpenOrCreateDB(int) 
(this=this at entry=0x4278780, flags=flags at entry=6) at 
ogrsqlitedatasource.cpp:455
#2  0x00007ffff4ab473e in OGRSQLiteDataSource::Create(char const*, 
char**) (this=this at entry=0x4278780, pszNameIn=pszNameIn at entry=0x42786d8 
"/vsimem/spatialitetest.sqlite", 
papszOptions=papszOptions at entry=0x1e695d0) at ogrsqlitedatasource.cpp:610
#3  0x00007ffff4ab8666 in OGRSQLiteDriver::CreateDataSource(char const*, 
char**) (this=<optimized out>, pszName=0x42786d8 
"/vsimem/spatialitetest.sqlite", papszOptions=0x1e695d0)
     at ogrsqlitedriver.cpp:203
#4  0x00007ffff4aa5f82 in OGR_Dr_CreateDataSource(OGRSFDriverH, char 
const*, char**) (hDriver=0x11f4b80, pszName=<optimized out>, 
papszOptions=<optimized out>) at ogrsfdriver.cpp:74
#5  0x00007ffff3d2477e in QgsVectorFileWriter::ogrDriverList() () at 
/usr/src/debug/qgis-2.6.0/src/core/qgsvectorfilewriter.cpp:2127

(gdb) frame 0
#0  0x00007ffff4ad36ce in OGR2SQLITE_Register () at 
ogrsqlitevirtualogr.cpp:2460
2460        sqlite3_auto_extension ((void (*)(void)) 
OGR2SQLITE_static_register);

(gdb) print sqlite3_api
$1 = (const sqlite3_api_routines *) 0x0


Thanks for any inputs.

Best,
Sandro


More information about the gdal-dev mailing list