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