Hello !
I hope you can understand my bad english ;-)
Since a long time i use sqlite for my projects. Now i have updated from
SQLite v3.7.3 over SQLite v3.7.5 to SQLite 3.7.6.
I use SQLite Amalgamation and compile it with gcc 2.95 under windows xp.
Compiling options for "Amalgamation" are :
SQLITE_MAX_LENGTH=1000000000 <--- I have long
BLOBS
SQLITE_MAX_SQL_LENGTH=1000000000 <--- I have long BLOBS
SQLITE_MAX_EXPR_DEPTH=0
SQLITE_THREADSAFE=0 <--- I have testet
with this option. The result are the same ;-(
The binding to my cpp object follows dynamic (LoadLibrary, GetProc and so
on..)
I have defined many own SQL functions for SQLite. TRIM() is one of them.
Since SQLite version 3.7.5 crash my code on
"sqlite3VdbeMemSetStr" on line 56539 on sqlite3.c from sqlite-amalgamation
(v3.7.6.1). This codelines have follow content:
SNIP ------>
if( pMem->db ){
iLimit = pMem->db->aLimit[SQLITE_LIMIT_LENGTH]; // <-- THIS LINE IS
56539
}else{
iLimit = SQLITE_MAX_LENGTH;
}
<---------- SNIP
The Sample TRIM() SQL function is... (PRC_... calls are dynamically loaded
pointer from sqlite3.dll)
SNIP ------>
void SQLITEFUNC_trim(sqlite3_context *pContext, int argc, sqlite3_value
**argv)
{
char *buf = NULL;
if(argc == 1)
{
switch(PRC_SQLITE3_VALUE_TYPE(argv[0]))
{
case SQLITE_TEXT: buf = SPL_mallocstr(SPL_StrTrim((char *)
PRC_SQLITE3_VALUE_TEXT(argv[0]))); break; // <---- SPL_xxx are my
functions to convert anything to string
case SQLITE_FLOAT: buf = SPL_mallocstr(SPL_DoubleToAsci("%f",
PRC_SQLITE3_VALUE_DOUBLE(argv[0]))); break;
case SQLITE_INTEGER: buf = SPL_mallocstr(SPL_IntegerToAsci("%d",
PRC_SQLITE3_VALUE_INT(argv[0]))); break;
case SQLITE_BLOB: break;
case SQLITE_NULL: buf = SPL_mallocstr(""); // <---- I need this !
break;
}
}
if(!buf)
{
<--- Error Handler removed ---->
return;
}
PRC_SQLITE3_RESULT_TEXT(pContext, buf, -1, SPL_free);
}
<---------- SNIP
"SPL_mallocstr" and "SPL_free" are equal to malloc and free. "SPL_mallocstr"
makes a good string with '\0' at the end.
I hope you can understand me and haves hints for me or you can make a
bug-ticket ?
Thanxs for your help.
A nice weekend and greetings from berlin/germany.
Jaromir Prinzler
SNIP ------>
Gdb (the debugger produce the output)
Program received signal SIGSEGV, Segmentation fault.
0x6092811d in sqlite3VdbeMemSetStr (pMem=0x22be58, z=0x27b0ae8 "", n=-1,
enc=1 '\001', xDel=0x6bb5acd4 <SPL_free(void *)>) at
../sources/sqlite3.c:56539
56539 ../sources/sqlite3.c: No such file or directory.
in ../sources/sqlite3.c
(gdb) bt
#0 0x6092811d in sqlite3VdbeMemSetStr (pMem=0x22be58, z=0x27b0ae8 "", n=-1,
enc=1 '\001', xDel=0x6bb5acd4 <SPL_free(void *)>) at
../sources/sqlite3.c:56539
#1 0x6092d6fc in setResultStrOrError (pCtx=0x22be50, z=0x27b0ae8 "", n=-1,
enc=1 '\001', xDel=0x6bb5acd4 <SPL_free(void *)>) at
../sources/sqlite3.c:60398
#2 0x6092d85c in sqlite3_result_text (pCtx=0x22be50, z=0x27b0ae8 "", n=-1,
xDel=0x6bb5acd4 <SPL_free(void *)>) at ../sources/sqlite3.c:60447
#3 0x6bb7a5de in SQLITEFUNC_trim (pContext=0x22be50, argc=1,
argv=0x27af538) at ../sources/spl_database.cpp:409
#4 0x60931273 in sqlite3VdbeExec (p=0x27b3040) at
../sources/sqlite3.c:63587
#5 0x6092dbd1 in sqlite3Step (p=0x27b3040) at ../sources/sqlite3.c:60613
#6 0x6092ddac in sqlite3_step (pStmt=0x27b3040) at
../sources/sqlite3.c:60680
#7 0x6095492c in sqlite3_exec (db=0x27250d0, zSql=0x27ba008 "SELECT
basis_adressen.lnr,
TRIM(CONCAT(basis_adressen.organisation,'\n\n',TRIM(basis_adressen.strasse
|| '\n' || TRIM(basis_laender.kuerzel || '-' || basis_adressen.plz || ' ' ||
basis_adressen.ort) || '"..., xCallback=0x6ba90f30
<DATABASE_SQLite_QueryCallback(void *, int, char **, char **)>, pArg=0x27c2
e70, pzErrMsg=0x22c108) at ../sources/sqlite3.c:20714
#8 0x6ba9f8aa in DATABASE::DATABASE_Query (this=0xe3b4c8,
pszQuery=0x27ba008 "SELECT basis_adressen.lnr,
TRIM(CONCAT(basis_adressen.organisation,'\n\n',TRIM(basis_adressen.strasse
|| '\n' || TRIM(basis_laender.kuerzel || '-' || basis_adressen.plz || ' '||
basis_adressen.ort) || '"...)
at ../sources/obj_database.cpp:3404
#9 0x6baa003f in DATABASE::DATABASE_RowQuery (this=0xe3b4c8,
pszQuery=0x27ba008 "SELECT basis_adressen.lnr,
TRIM(CONCAT(basis_adressen.organisation,'\n\n',TR
IM(basis_adressen.strasse || '\n' || TRIM(basis_laender.kuerzel || '-' ||
basis_adressen.plz || ' '|| basis_adressen.ort) || '"...)
at ../sources/obj_database.cpp:3571
#10 0x6baa0204 in DATABASE::DATABASE_RowQueryEx (this=0xe3b4c8,
pszQuery=0x4c504c "SELECT basis_adressen.lnr,
TRIM(CONCAT(basis_adressen.organisation,'\n\n',TRI
M(basis_adressen.strasse || '\n' || TRIM(basis_laender.kuerzel || '-' ||
basis_adressen.plz || ' ' || basis_adressen.ort) || '"...)
at ../sources/obj_database.cpp:3626
#11 0x004c65cb in FIRMEN_Activate (pActiv=0x2753aa8, inx=2)
at ../sources/1_start/mod_firmen.cpp:175
#12 0x004c69b7 in FIRMEN_Message (pActiv=0x2753aa8, pEvent=0x27c2e28)
at ../sources/1_start/mod_firmen.cpp:314
#13 0x6bb11edd in ACTIV::ACTIV_ProcessMessage (this=0x2753aa8,
bForwardToWindow=true, pEvent=0x27c2e28) at
../sources/obj_active.cpp:4375
#14 0x6bb11187 in ACTIV::ACTIV_ActivProcedure (this=0x2753aa8,
system=0xe35120, window=0xe36b78, activ=0x2753aa8, hwnd=0x6808a2,
message=78, wParam=2, lParam=2281696) at ../sources/obj_active.cpp:4035
#15 0x6bb067f9 in ActivProcedure (hwnd=0x6808a2, message=78, wParam=2,
lParam=2281696) at ../sources/obj_active.cpp:39
#16 0x7e368734 in _libws2_32_a_iname ()
<---------- SNIP
_______________________________________________
sqlite-users mailing list
[email protected]
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users