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

Reply via email to