Hi,
I'm getting a crash in the sqlite shell on Windows 7 in sqlite3 version 3.12.1.
I can reprduce it with the console commands
echo "SELECT 1;" > tmp.sql
sqlite3 :memory: -init tmp.sql >log
What seems to happen is that sqlite3_initialise is never called and
consequently the malloc function pointers (specifically
sqlite3GlobalConfig.m.xRoundup) are null.
Call stack for the crash:-
00 0044f0e4 00275700 0x0
01 0044f108 00241699 sqlite3!mallocWithAlarm(int n = 0n164, void ** pp =
0x0044f118)+0x10
[c:\pf\swgraphics\tools\extern_con\main\sqlite\src-split\sqlite3-1.c @ 22226]
02 0044f11c 002416e1 sqlite3!sqlite3Malloc(unsigned int64 n = 0xa4)+0x49
[c:\pf\swgraphics\tools\extern_con\main\sqlite\src-split\sqlite3-1.c @ 22268]
03 0044f130 00276839 sqlite3!sqlite3MallocZero(unsigned int64 n = 0xa4)+0x11
[c:\pf\swgraphics\tools\extern_con\main\sqlite\src-split\sqlite3-1.c @ 22568]
04 0044f150 0027696f sqlite3!winMbcsToUnicode(char * zFilename = 0x006d6b50
"CREATE TABLE IF NOT EXISTS test_results ")+0x69
[c:\pf\swgraphics\tools\extern_con\main\sqlite\src-split\sqlite3-2.c @ 9682]
05 0044f164 00221ef3 sqlite3!sqlite3_win32_mbcs_to_utf8(char * zFilename =
0x006d6b50 "CREATE TABLE IF NOT EXISTS test_results ")+0xf
[c:\pf\swgraphics\tools\extern_con\main\sqlite\src-split\sqlite3-2.c @ 9732]
06 0044f184 00221f89 sqlite3!local_getline(char * zLine = 0x006d6b50 "CREATE
TABLE IF NOT EXISTS test_results ", struct _iobuf * in = 0x00325410)+0x123
[c:\pf\swgraphics\tools\extern_con\main\sqlite\src-split\shell.c @ 490]
07 0044f1a0 0022528c sqlite3!one_input_line(struct _iobuf * in = 0x00325410,
char * zPrior = 0x00000000 "", int isContinuation = 0n0)+0x19
[c:\pf\swgraphics\tools\extern_con\main\sqlite\src-split\shell.c @ 526]
08 0044f254 0022c715 sqlite3!process_input(struct ShellState * p = 0x0044f2f4,
struct _iobuf * in = 0x00325410)+0xbc
[c:\pf\swgraphics\tools\extern_con\main\sqlite\src-split\shell.c @ 4399]
09 0044f274 0022d167 sqlite3!process_sqliterc(struct ShellState * p =
0x0044f2f4, char * sqliterc_override = 0x006d7e88
"C:\pf\swgraphics\rogueddk\MAIN\tools\intern\usc2\perf.db.sql")+0xc5
[c:\pf\swgraphics\tools\extern_con\main\sqlite\src-split\shell.c @ 4593]
0a 0044f7c8 002e454d sqlite3!main(int argc = 0n6, char ** argv =
0x006d7e18)+0x7f7
[c:\pf\swgraphics\tools\extern_con\main\sqlite\src-split\shell.c @ 4875]
The crash only happens if the shell output is redirected to a file otherwise
the call sequence
process_sqliterc
->utf8_printf(stderr,"-- Loading resources from %s\n",sqliterc)
->sqlite3_vmprintf
->sqlite3_initialize
causes the malloc functions to be set up.
I fixed it with this patch
--- orig-src/sqlite-src-3120100/src/os_win.c 2016-04-18 13:40:00.295629200
+0100
+++ sqlite-src-3120100/src/os_win.c 2016-04-18 13:35:52.358129200 +0100
@@ -1693,6 +1693,10 @@
LPWSTR zMbcsFilename;
int codepage = osAreFileApisANSI() ? CP_ACP : CP_OEMCP;
+ #ifndef SQLITE_OMIT_AUTOINIT
+ if( sqlite3_initialize() ) return 0;
+ #endif
+
nByte = osMultiByteToWideChar(codepage, 0, zFilename, -1, NULL,
0)*sizeof(WCHAR);
if( nByte==0 ){