On Sun, Mar 16, 2008 at 4:37 PM, Massimo Cora' <[EMAIL PROTECTED]> wrote: > -----BEGIN PGP SIGNED MESSAGE----- > Hash: SHA1 > > Hi Vivien, > > I've found a crasher on libgda-trunk. > > You can reproduce that just adding a > > run_sql_non_select (cnc, "\n"); > > on samples/SimpleExample/example.c inside create_table () function. > > backtrace > Program received signal SIGSEGV, Segmentation fault. > [Switching to Thread -1217751360 (LWP 29102)] > 0xb7f13838 in sqlite3_clear_bindings (pStmt=0x0) at sqlite3.c:37988 > 37988 sqlite3_mutex *mutex = ((Vdbe*)pStmt)->db->mutex; > (gdb) bt > #0 0xb7f13838 in sqlite3_clear_bindings (pStmt=0x0) at sqlite3.c:37988 > #1 0xb7ef9bb8 in gda_sqlite_provider_statement_execute > (provider=0x8080f60, > cnc=0x80c67c0, stmt=0x80b4ac0, params=0x0, > model_usage=GDA_STATEMENT_MODEL_RANDOM_ACCESS, col_types=0x80b44e8, > last_inserted_row=0x0, task_id=0x0, async_cb=0, cb_data=0x0, > error=0xbfbb3478) at gda-sqlite-provider.c:1600 > #2 0xb7e9a449 in gda_connection_statement_execute_v (cnc=0x80c67c0, > stmt=0x80b4ac0, params=0x0, > model_usage=GDA_STATEMENT_MODEL_RANDOM_ACCESS, > last_inserted_row=0x0, error=0xbfbb3478) at gda-connection.c:1210 > #3 0xb7e9d773 in gda_connection_statement_execute_non_select > (cnc=0x80c67c0, > stmt=0x80b4ac0, params=0x0, last_insert_row=0x0, error=0xbfbb3478) > at gda-connection.c:1309 > #4 0x08048bd3 in run_sql_non_select (cnc=0x80c67c0, sql=0x8048d97 "\n") > at example.c:112 > #5 0x08048a1f in create_table (cnc=0x80c67c0) at example.c:60 > #6 0x0804891f in main (argc=135012808, argv=0x1) at example.c:18 > > I've found this while recursively calling run_sql_non_select () to parse > a table.sql file, where there are instructions to many 'create table > functions'.
It seems SQLite does not work correctly when the prepared statement is NULL (it makes it crash). However normally the parser includes leading and trailing newlines into the current statement, so you should not have any problem. For example parsing the "stmt1\n;\n\nstmt2;\nstmt3\n" should create 3 statements only. Of course you can always use gda_statement_is_useless() to tell if a statement is useless. Anyway, the correction will be in SVN ASAP. Cheers, Vivien _______________________________________________ gnome-db-list mailing list [email protected] http://mail.gnome.org/mailman/listinfo/gnome-db-list
