From: danielk1977 Date: Thu, 5 Jan 2006 14:22:33 +0000 (+0000) Subject: Fix for ticket #1582 (Double delete of invalid LIMIT clause Expr* applied to a UNION... X-Git-Tag: version-3.6.10~3306 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=ad68cb6b6943f288d5f6221dc482a12e8ee8b4cb;p=thirdparty%2Fsqlite.git Fix for ticket #1582 (Double delete of invalid LIMIT clause Expr* applied to a UNION ALL query). (CVS 2861) FossilOrigin-Name: 5dec3a392ba3c249bbca899c12e99c26cc1b8cdb --- diff --git a/manifest b/manifest index e8f7f2f1b4..cf3dd05721 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Disable\sautomatic\sinvocation\sof\ssqlite3_release_memory()\swhen\sa\smalloc()\sfails\nin\sthose\scases\swhere\sthe\sglobal\smutex\sis\sheld.\s(CVS\s2860) -D 2006-01-05T13:48:29 +C Fix\sfor\sticket\s#1582\s(Double\sdelete\sof\sinvalid\sLIMIT\sclause\sExpr*\sapplied\sto\sa\sUNION\sALL\squery).\s(CVS\s2861) +D 2006-01-05T14:22:34 F Makefile.in e3c6b3a38d734d41574c04f2fc90d18de2b87102 F Makefile.linux-gcc aee18d8a05546dcf1888bd4547e442008a49a092 F README 9c4e2d6706bdcc3efdd773ce752a8cdab4f90028 @@ -66,7 +66,7 @@ F src/pragma.c 4af4041a88d41421b8ff2e5574d82d7b9d1e35b1 F src/prepare.c 67ff283f7c71e32a91d8c843e758eb4bf68ab94e F src/printf.c f47a2f4b5387cd2ebb12e9117a1a5d6bd9a2b812 F src/random.c ff5e9a8cad790e2a51cd4d2e7737dc8540e09d1d -F src/select.c 7a78520fcd79daccd4e33721dbc977d2e5c5d95a +F src/select.c a60e5c7fad9ce7adc78d9eb32a0a89dd5acd04fb F src/shell.c 66b073375efbdee19045e7e0cd38b85f9aff71da F src/sqlite.h.in ba3a29daa6a16e054191ccb384a981964e882a1d F src/sqliteInt.h 6f29c97703b1a1e032916b0bab83efe9b2734984 @@ -196,7 +196,7 @@ F test/misc1.test 7aabf32e698ef7cc1253f5e7fc216c65870ce485 F test/misc2.test 5c699af2fede2694736a9f45aea7e2f052686e15 F test/misc3.test 7bd937e2c62bcc6be71939faf068d506467b1e03 F test/misc4.test b043a05dea037cca5989f3ae09552fa16119bc80 -F test/misc5.test ed79d4c892a4995b29d03d6baebe6457bfb35a9e +F test/misc5.test a27520a0033f2837cda94bfdfb096a25fc4b128d F test/misuse.test 30b3a458e5a70c31e74c291937b6c82204c59f33 F test/notnull.test 7a08117a71e74b0321aaa937dbeb41a09d6eb1d0 F test/null.test 012fe5455f4fc3102490b4bad373a674e5741fdd @@ -336,7 +336,7 @@ F www/tclsqlite.tcl ddcf912ea48695603c8ed7efb29f0812ef8d1b49 F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0 F www/version3.tcl a99cf5f6d8bd4d5537584a2b342f0fb9fa601d8b F www/whentouse.tcl 97e2b5cd296f7d8057e11f44427dea8a4c2db513 -P deeda0dc06c1595aedd8d06a0c4e88a8abf78cf7 -R 9d12b452805846233d53c41b43a70bb0 +P 6fdbb8b771e490f0d791326689245302c4fe18f5 +R b489dd3c565f674bf68347d5b31f3b83 U danielk1977 -Z f6fa8bc04dbc256a46d97346ce8d34cd +Z 74556dd90bea6451105d7798d9757184 diff --git a/manifest.uuid b/manifest.uuid index 42c4c88def..1c90776d18 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -6fdbb8b771e490f0d791326689245302c4fe18f5 \ No newline at end of file +5dec3a392ba3c249bbca899c12e99c26cc1b8cdb \ No newline at end of file diff --git a/src/select.c b/src/select.c index 20f07d4db0..af19681c52 100644 --- a/src/select.c +++ b/src/select.c @@ -12,7 +12,7 @@ ** This file contains C code routines that are called by the parser ** to handle SELECT statements in SQLite. ** -** $Id: select.c,v 1.284 2006/01/05 11:34:34 danielk1977 Exp $ +** $Id: select.c,v 1.285 2006/01/05 14:22:34 danielk1977 Exp $ */ #include "sqliteInt.h" @@ -1548,14 +1548,14 @@ static int multiSelect( pPrior->pLimit = p->pLimit; pPrior->pOffset = p->pOffset; rc = sqlite3Select(pParse, pPrior, eDest, iParm, 0, 0, 0, aff); + p->pLimit = 0; + p->pOffset = 0; if( rc ){ goto multi_select_end; } p->pPrior = 0; p->iLimit = pPrior->iLimit; p->iOffset = pPrior->iOffset; - p->pLimit = 0; - p->pOffset = 0; if( p->iLimit>=0 ){ addr = sqlite3VdbeAddOp(v, OP_IfMemZero, p->iLimit, 0); VdbeComment((v, "# Jump ahead if LIMIT reached")); diff --git a/test/misc5.test b/test/misc5.test index a32443bb5c..8170496e6d 100644 --- a/test/misc5.test +++ b/test/misc5.test @@ -13,7 +13,7 @@ # This file implements tests for miscellanous features that were # left out of other test files. # -# $Id: misc5.test,v 1.7 2005/11/14 22:29:06 drh Exp $ +# $Id: misc5.test,v 1.8 2006/01/05 14:22:34 danielk1977 Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl @@ -502,5 +502,32 @@ do_test misc5-5.4 { execsql {SELECT .4e+1} } 4.0 +# Ticket #1582. Ensure that an unknown table in a LIMIT clause applied to +# a UNION ALL query causes an error, not a crash. +# +db close +file delete -force test.db +sqlite3 db test.db +ifcapable subquery { + do_test misc5-6.1 { + catchsql { + SELECT * FROM sqlite_master + UNION ALL + SELECT * FROM sqlite_master + LIMIT (SELECT count(*) FROM blah); + } + } {1 {no such table: blah}} + do_test misc5-6.2 { + execsql { + CREATE TABLE logs(msg TEXT, timestamp INTEGER, dbtime TEXT); + } + catchsql { + SELECT * FROM logs WHERE logs.id >= (SELECT head FROM logs_base) + UNION ALL + SELECT * FROM logs + LIMIT (SELECT lmt FROM logs_base) ; + } + } {1 {no such column: logs.id}} +} finish_test