Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Fix an obscure memory leak that could follow an OOM in where.c. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
08ec9f2f5a446774bb8e9b9b0ef463dd |
User & Date: | dan 2015-04-25 12:20:24.152 |
Context
2015-04-25
| ||
13:39 | Add the fuzzoomtest target to the makefiles. Invoke fuzzoomtest from releasetest.tcl. (check-in: f60657c2ae user: drh tags: trunk) | |
12:20 | Fix an obscure memory leak that could follow an OOM in where.c. (check-in: 08ec9f2f5a user: dan tags: trunk) | |
11:35 | In fuzzershell: (1) comment fixes. (2) Set and clear g.zTestName[] correctly. (3) Use the value in g.zTestName[] in error messages. (check-in: b7394755fa user: drh tags: trunk) | |
Changes
Changes to src/where.c.
︙ | ︙ | |||
4299 4300 4301 4302 4303 4304 4305 4306 4307 4308 4309 4310 4311 4312 | } /* ** Free a WhereInfo structure */ static void whereInfoFree(sqlite3 *db, WhereInfo *pWInfo){ if( ALWAYS(pWInfo) ){ whereClauseClear(&pWInfo->sWC); while( pWInfo->pLoops ){ WhereLoop *p = pWInfo->pLoops; pWInfo->pLoops = p->pNextLoop; whereLoopDelete(db, p); } sqlite3DbFree(db, pWInfo); | > > > > > > > | 4299 4300 4301 4302 4303 4304 4305 4306 4307 4308 4309 4310 4311 4312 4313 4314 4315 4316 4317 4318 4319 | } /* ** Free a WhereInfo structure */ static void whereInfoFree(sqlite3 *db, WhereInfo *pWInfo){ if( ALWAYS(pWInfo) ){ int i; for(i=0; i<pWInfo->nLevel; i++){ WhereLevel *pLevel = &pWInfo->a[i]; if( pLevel->pWLoop && (pLevel->pWLoop->wsFlags & WHERE_IN_ABLE) ){ sqlite3DbFree(db, pLevel->u.in.aInLoop); } } whereClauseClear(&pWInfo->sWC); while( pWInfo->pLoops ){ WhereLoop *p = pWInfo->pLoops; pWInfo->pLoops = p->pNextLoop; whereLoopDelete(db, p); } sqlite3DbFree(db, pWInfo); |
︙ | ︙ | |||
6895 6896 6897 6898 6899 6900 6901 | sqlite3VdbeJumpHere(v, pIn->addrInTop+1); sqlite3VdbeAddOp2(v, pIn->eEndLoopOp, pIn->iCur, pIn->addrInTop); VdbeCoverage(v); VdbeCoverageIf(v, pIn->eEndLoopOp==OP_PrevIfOpen); VdbeCoverageIf(v, pIn->eEndLoopOp==OP_NextIfOpen); sqlite3VdbeJumpHere(v, pIn->addrInTop-1); } | < | 6902 6903 6904 6905 6906 6907 6908 6909 6910 6911 6912 6913 6914 6915 | sqlite3VdbeJumpHere(v, pIn->addrInTop+1); sqlite3VdbeAddOp2(v, pIn->eEndLoopOp, pIn->iCur, pIn->addrInTop); VdbeCoverage(v); VdbeCoverageIf(v, pIn->eEndLoopOp==OP_PrevIfOpen); VdbeCoverageIf(v, pIn->eEndLoopOp==OP_NextIfOpen); sqlite3VdbeJumpHere(v, pIn->addrInTop-1); } } sqlite3VdbeResolveLabel(v, pLevel->addrBrk); if( pLevel->addrSkip ){ sqlite3VdbeAddOp2(v, OP_Goto, 0, pLevel->addrSkip); VdbeComment((v, "next skip-scan on %s", pLoop->u.btree.pIndex->zName)); sqlite3VdbeJumpHere(v, pLevel->addrSkip); sqlite3VdbeJumpHere(v, pLevel->addrSkip-2); |
︙ | ︙ |
Changes to test/malloc.test.
︙ | ︙ | |||
918 919 920 921 922 923 924 925 926 927 928 929 930 931 | } do_faultsim_test 41.2 -faults oom* -body { execsql { SELECT * FROM t1 WHERE a = ('abcde' || $::big)} } -test { faultsim_test_result [list 0 "abcde$::big"] faultsim_integrity_check } # Ensure that no file descriptors were leaked. do_test malloc-99.X { catch {db close} set sqlite_open_file_count } {0} | > > > > > > > > > > > > > > > > > > > > > | 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 | } do_faultsim_test 41.2 -faults oom* -body { execsql { SELECT * FROM t1 WHERE a = ('abcde' || $::big)} } -test { faultsim_test_result [list 0 "abcde$::big"] faultsim_integrity_check } reset_db do_execsql_test 42.0 { CREATE TABLE t1(x INTEGER PRIMARY KEY, y, z); CREATE TABLE t2(a, b); CREATE VIEW a002 AS SELECT *, sum(b) AS m FROM t2 GROUP BY a; } faultsim_save_and_close do_faultsim_test 42 -faults oom-tran* -prep { faultsim_restore_and_reopen execsql { SELECT * FROM sqlite_master } } -body { execsql { SELECT t1.z, a002.m FROM t1 JOIN a002 ON t1.y=a002.m WHERE t1.x IN (1,2,3); } } -test { faultsim_test_result {0 {}} } # Ensure that no file descriptors were leaked. do_test malloc-99.X { catch {db close} set sqlite_open_file_count } {0} |
︙ | ︙ |