aboutsummaryrefslogtreecommitdiff
path: root/src/wherecode.c
diff options
context:
space:
mode:
authordrh <drh@noemail.net>2020-09-17 11:32:14 +0000
committerdrh <drh@noemail.net>2020-09-17 11:32:14 +0000
commitbc2e95140b7ff79b26a9ff78cd089e63df7d0fef (patch)
tree7ca50d2055260472effe42d904c4431c1106da96 /src/wherecode.c
parentf1ea42556073c45dc07c31631f4cd12938761889 (diff)
downloadsqlite-bc2e95140b7ff79b26a9ff78cd089e63df7d0fef.tar.gz
sqlite-bc2e95140b7ff79b26a9ff78cd089e63df7d0fef.zip
Prevent use-after-free of the u.vtab.idxStr string following an OOM
while generating the OP_VFilter opcode. FossilOrigin-Name: 751fe4edb2d4602e652523c2759de3f4fffd29d5c66cae68caf45b30fd8b750a
Diffstat (limited to 'src/wherecode.c')
-rw-r--r--src/wherecode.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/src/wherecode.c b/src/wherecode.c
index 591f267e8..ae3a19757 100644
--- a/src/wherecode.c
+++ b/src/wherecode.c
@@ -1397,6 +1397,9 @@ Bitmask sqlite3WhereCodeOneLoopStart(
pLoop->u.vtab.needFree ? P4_DYNAMIC : P4_STATIC);
VdbeCoverage(v);
pLoop->u.vtab.needFree = 0;
+ /* An OOM inside of AddOp4(OP_VFilter) instruction above might have freed
+ ** the u.vtab.idxStr. NULL it out to prevent a use-after-free */
+ if( db->mallocFailed ) pLoop->u.vtab.idxStr = 0;
pLevel->p1 = iCur;
pLevel->op = pWInfo->eOnePass ? OP_Noop : OP_VNext;
pLevel->p2 = sqlite3VdbeCurrentAddr(v);