Do not segfault after a parse error in a sub-select in a statement of the form "DELETE WHERE ... IN(sub-select)". Ticket #2991. (CVS 4854)

FossilOrigin-Name: 3f9f81e908aad6cdc0a16ec52f4ec46d89fd78bc
This commit is contained in:
danielk1977 2008-03-12 10:39:00 +00:00
parent f3868117f9
commit b2b95d41a1
4 changed files with 31 additions and 12 deletions

View File

@ -1,5 +1,5 @@
C If\stclsh\sis\snot\sfound,\sdon't\sdefault\sto\sbuilding\sthe\samalgamation\s(CVS\s4853)
D 2008-03-11T18:03:31
C Do\snot\ssegfault\safter\sa\sparse\serror\sin\sa\ssub-select\sin\sa\sstatement\sof\sthe\sform\s"DELETE\sWHERE\s...\sIN(sub-select)".\sTicket\s#2991.\s(CVS\s4854)
D 2008-03-12T10:39:00
F Makefile.arm-wince-mingw32ce-gcc ac5f7b2cef0cd850d6f755ba6ee4ab961b1fadf7
F Makefile.in 3e2eb2b4a4148aff92bbc6d8496d0696c36bf0b6
F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654
@ -95,7 +95,7 @@ F src/config.h.in 343f19cacc74d4baf84a4af701b5bb44419642ff
F src/date.c 187cad26eaaecd7bcdccd49d5a70c5aa3010bc74
F src/delete.c fa13c296262e89c32d28949f15be275e52d7f524
F src/experimental.c 1b2d1a6cd62ecc39610e97670332ca073c50792b
F src/expr.c 4531fb111f8addb74f785435efa05699d906c269
F src/expr.c 242f2f57a32f6909270e4a22ce1c810a150f5a17
F src/fault.c 049b88b8ba0a1db3240aeaf9695cd08b9a3ba9e1
F src/func.c a4f06d8a1d7e4c8c8755a59d1310141b7c090bd9
F src/hash.c 53655c312280211444bfe23af6490a460aec2980
@ -335,7 +335,7 @@ F test/hook.test e17d4ed2843ba4ef9b234aa63e6f056bf88f9a19
F test/icu.test e6bfae7f625c88fd14df6f540fe835bdfc1e4329
F test/in.test 763a29007a4850d611ac4441bfa488fb9969ad30
F test/in2.test b1f447f4f0f67e9f83ff931e7e2e30873f9ea055
F test/in3.test 2f829007cc8d25d17b859f7fe882ef2bd2e2eb49
F test/in3.test dc62b080ed79898121c61c91118b4d1e111f1438
F test/incrblob.test 854c23b7ff8dd3822f675936b22c094655b3c739
F test/incrblob_err.test 5273097dc7c97f9b7008423a6ffd5c80d21923cb
F test/incrvacuum.test 1a2b0bddc76629afeb41e3d8ea3e4563982d16b9
@ -623,7 +623,7 @@ F www/tclsqlite.tcl 8be95ee6dba05eabcd27a9d91331c803f2ce2130
F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0
F www/version3.tcl 890248cf7b70e60c383b0e84d77d5132b3ead42b
F www/whentouse.tcl fc46eae081251c3c181bd79c5faef8195d7991a5
P c85e97e4f0f02219b567e1ab2d4602c5680e7331
R 42b36528a0cb8e883f6272aeb9d7392d
U mlcreech
Z 3d1016d08e7c01fa0b2f470b327e4eb8
P cbc0167556bd0abd16eb24d1c840ecbc530fd854
R 22c03be44b71ef0fcc59e63ea4db9d89
U danielk1977
Z 280e42674eeeed7c685a5a302f638bf0

View File

@ -1 +1 @@
cbc0167556bd0abd16eb24d1c840ecbc530fd854
3f9f81e908aad6cdc0a16ec52f4ec46d89fd78bc

View File

@ -12,7 +12,7 @@
** This file contains routines used for analyzing expressions and
** for generating VDBE code that evaluates expressions in SQLite.
**
** $Id: expr.c,v 1.353 2008/03/10 14:12:53 drh Exp $
** $Id: expr.c,v 1.354 2008/03/12 10:39:00 danielk1977 Exp $
*/
#include "sqliteInt.h"
#include <ctype.h>
@ -1577,7 +1577,7 @@ int sqlite3FindInIndex(Parse *pParse, Expr *pX, int mustBeUnique){
&& (p=pX->pSelect)!=0 && !p->pPrior
&& !p->isDistinct && !p->isAgg && !p->pGroupBy
&& p->pSrc && p->pSrc->nSrc==1 && !p->pSrc->a[0].pSelect
&& !p->pSrc->a[0].pTab->pSelect
&& p->pSrc->a[0].pTab && !p->pSrc->a[0].pTab->pSelect
&& p->pEList->nExpr==1 && p->pEList->a[0].pExpr->op==TK_COLUMN
&& !p->pLimit && !p->pOffset && !p->pWhere
){

View File

@ -13,7 +13,7 @@
#
# <value> IN (SELECT <column> FROM <table>)
#
# $Id: in3.test,v 1.3 2008/01/17 16:22:16 drh Exp $
# $Id: in3.test,v 1.4 2008/03/12 10:39:00 danielk1977 Exp $
set testdir [file dirname $argv0]
source $testdir/tester.tcl
@ -265,4 +265,23 @@ do_test in3-4.6 {
execsql { DROP INDEX t3_i2 }
} {}
# The following two test cases verify that ticket #2991 has been fixed.
#
do_test in3-5.1 {
execsql {
CREATE TABLE Folders(
folderid INTEGER PRIMARY KEY,
parentid INTEGER,
rootid INTEGER,
path VARCHAR(255)
);
}
} {}
do_test in3-5.2 {
catchsql {
DELETE FROM Folders WHERE folderid IN
(SELECT folderid FROM Folder WHERE path LIKE 'C:\MP3\Albums\' || '%');
}
} {1 {no such table: Folder}}
finish_test