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 sqlite-users@sqlite.org http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users