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@entry=0x4278780, flags=flags@entry=6) at ogrsqlitedatasource.cpp:455 #2 0x00007ffff4ab473e in OGRSQLiteDataSource::Create(char const*, char**) (this=this@entry=0x4278780, pszNameIn=pszNameIn@entry=0x42786d8 "/vsimem/spatialitetest.sqlite", papszOptions=papszOptions@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
_______________________________________________
gdal-dev mailing list
[email protected]
http://lists.osgeo.org/mailman/listinfo/gdal-dev

Reply via email to