Hi

I'm using Freeswitch, which has an old version of SQLite embedded in its source code. I'm getting a segmentation fault whenever I do something that uses triggers. The segmentation fault occurs inside SQLite code (strdup gets called with a null pointer inside sqlite3ExprListDup). Freeswicth uses SQLite extensively without problems, but I have found no other uses of triggers in the code, so this problem might have gone unnoticed so far.

The version that Freeswitch uses is very old (3.3.13), so I wouldn't expect anyone to look into this problem, as if it is indeed a bug in SQLite, it is likely alredy fixed in a more recent version. The problem is I don't know how much trouble I would find trying to update the SQLite version included with Freeswitch. So what I wanted to ask is: by looking at the backtrace, does it seem like a SQLite bug that should be fixed in a more recent version?

Thanks in advance.

Neven Boric
(gdb) bt full
#0  0xb713a123 in strlen () from /lib/libc.so.6
No symbol table info available.
#1  0xb7139eab in *__GI___strdup (s=0x0) at strdup.c:42
        len = <value optimized out>
        new = <value optimized out>
#2  0xb76dedb4 in sqlite3ExprListDup (p=0x8cdddb8) at ./src/expr.c:516
        pNewExpr = <value optimized out>
        pOldExpr = (Expr *) 0x8cddd70
        pNew = (ExprList *) 0x8cde878
        pOldItem = <value optimized out>
        i = 0
#3  0xb76deee1 in sqlite3ExprDup (p=0x8cdde98) at ./src/expr.c:475
        pNew = (Expr *) 0x8cde820
#4  0xb76ded7f in sqlite3ExprListDup (p=0x8cddee0) at ./src/expr.c:506
        pNewExpr = <value optimized out>
        pOldExpr = (Expr *) 0x8cdde98
        pNew = (ExprList *) 0x8cde7f8
        pOldItem = <value optimized out>
        i = 0
#5  0xb76dfd44 in sqlite3SelectDup (p=0x8cddf68) at ./src/expr.c:588
        pNew = (Select *) 0x8cde7b0
#6  0xb76deef1 in sqlite3ExprDup (p=0x8cddfb0) at ./src/expr.c:476
        pNew = (Expr *) 0x8cde1e8
#7  0xb76deec1 in sqlite3ExprDup (p=0x8cde040) at ./src/expr.c:473
        pNew = (Expr *) 0x8cde1a0
#8  0xb76deed1 in sqlite3ExprDup (p=0x8cde088) at ./src/expr.c:474
        pNew = (Expr *) 0x8cde100
#9  0xb76bdb25 in sqlitePersistTriggerStep (p=0x8cde0d0) at ./src/trigger.c:307
        pNew = <value optimized out>
#10 0xb76be257 in sqlite3TriggerDeleteStep (pTableName=0x8cdd54c, 
pWhere=0x8cde088) at ./src/trigger.c:418
        pTriggerStep = (TriggerStep *) 0x8cde0d0
#11 0xb76ea01e in sqlite3Parser (yyp=0x8cdd498, yymajor=<value optimized out>, 
yyminor={z = 0x8cdd486 ";\nEND\n", dyn = 0, n = 1}, pParse=0xbff93dfc) at 
parse.y:985
        yyminorunion = {yy0 = {z = 0x8cdd486 ";\nEND\n", dyn = 0, n = 1}, yy43 
= 0x8cdd486, yy75 = 0x8cdd486, yy84 = {pLimit = 0x8cdd486, pOffset = 0x2}, yy86 
= {eOperator = {
      z = 0x8cdd486 ";\nEND\n", dyn = 0, n = 1}, not = -1074184808}, yy158 = 
0x8cdd486, yy178 = {z = 0x8cdd486 ";\nEND\n", dyn = 0, n = 1}, yy207 = {value = 
147707014, mask = 2},
  yy242 = 0x8cdd486, yy316 = 147707014, yy352 = 0x8cdd486, yy354 = {a = 
147707014, b = 0x2}, yy419 = 0x8cdd486, yy450 = 0x8cdd486, yy497 = 147707014}
        yyact = <value optimized out>
        yyerrorhit = 0
        yypParser = <value optimized out>
#12 0xb76bccad in sqlite3RunParser (pParse=0xbff93dfc, zSql=0x8cdd487 
"\nEND\n", pzErrMsg=0xbff93ec8) at ./src/tokenize.c:448
        nErr = <value optimized out>
        i = 135
        pEngine = (void *) 0x8cdd498
        tokenType = 1
        lastTokenParsed = 125
        db = (sqlite3 *) 0x8cc8980
#13 0xb76b9573 in sqlite3Prepare (db=0x8cc8980,
    zSql=0x8cdd400 "CREATE TRIGGER IF NOT EXISTS CDR_LIMIT AFTER INSERT ON 
cdr\nBEGIN\n\tDELETE FROM cdr WHERE rowid <= (SELECT MAX(rowid) from cdr) - 
100000;\nEND\n", nBytes=-1,
    saveSqlFlag=0, ppStmt=0xbff93f64, pzTail=0xbff93f68) at ./src/prepare.c:491
        sParse = {db = 0x8cc8980, rc = 0, zErrMsg = 0x0, pVdbe = 0x0, 
colNamesSet = 0 '\0', nameClash = 0 '\0', checkSchema = 0 '\0', nested = 0 
'\0', parseError = 0 '\0', nErr = 0, nTab = 0,
  nMem = 0, nSet = 0, ckOffset = 0, writeMask = 0, cookieMask = 0, cookieGoto = 
0, cookieValue = {0 <repeats 12 times>}, nTableLock = 0, aTableLock = 0x0, nVar 
= 0, nVarExpr = 0,
  nVarExprAlloc = 0, apVarExpr = 0x0, explain = 0 '\0', sErrToken = {z = 0x0, 
dyn = 0, n = 0}, sNameToken = {z = 0x0, dyn = 0, n = 0}, sLastToken = {z = 
0x8cdd486 ";\nEND\n", dyn = 0, n = 1},
  zSql = 0x8cdd400 "CREATE TRIGGER IF NOT EXISTS CDR_LIMIT AFTER INSERT ON 
cdr\nBEGIN\n\tDELETE FROM cdr WHERE rowid <= (SELECT MAX(rowid) from cdr) - 
100000;\nEND\n",
  zTail = 0x8cdd487 "\nEND\n", pNewTable = 0x0, pNewTrigger = 0x8cddcd0, 
trigStack = 0x0, zAuthContext = 0x0, sArg = {z = 0x0, dyn = 0, n = 0}, 
declareVtab = 0 '\0', pVirtualLock = 0x0}
        zErrMsg = 0x0
        rc = <value optimized out>
        i = <value optimized out>
#14 0xb76b9b1e in sqlite3_prepare (db=0x8cc8980,
    zSql=0x8cdd400 "CREATE TRIGGER IF NOT EXISTS CDR_LIMIT AFTER INSERT ON 
cdr\nBEGIN\n\tDELETE FROM cdr WHERE rowid <= (SELECT MAX(rowid) from cdr) - 
100000;\nEND\n", nBytes=-1,
    ppStmt=0xbff93f64, pzTail=0xbff93f68) at ./src/prepare.c:601
No locals.
#15 0xb76cb234 in sqlite3_exec (db=0x8cc8980,
    zSql=0x8cdd400 "CREATE TRIGGER IF NOT EXISTS CDR_LIMIT AFTER INSERT ON 
cdr\nBEGIN\n\tDELETE FROM cdr WHERE rowid <= (SELECT MAX(rowid) from cdr) - 
100000;\nEND\n", xCallback=0, pArg=0x0,
    pzErrMsg=0xbff93fb8) at ./src/legacy.c:56
        nCol = <value optimized out>
        azVals = (char **) 0x2
        rc = 154
        zLeftover = 0xb70ca68c "¦\034¦¦\034¦¦¦\034¦`! ¦"
        pStmt = (sqlite3_stmt *) 0x0
        azCols = (char **) 0xbff93f88
        nRetry = 0
        nChange = 0
        nCallback = -1218662363
#16 0xb7639c03 in switch_core_db_exec (db=0x8cc8980,
    sql=0x8cdd400 "CREATE TRIGGER IF NOT EXISTS CDR_LIMIT AFTER INSERT ON 
cdr\nBEGIN\n\tDELETE FROM cdr WHERE rowid <= (SELECT MAX(rowid) from cdr) - 
100000;\nEND\n", callback=0, data=0x0,
    errmsg=0xbff94008) at src/switch_core_db.c:94
        ret = <value optimized out>
        sane = 299
        err = 0x0
        __func__ = "switch_core_db_exec"
_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to