HiI'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