From: drh Date: Tue, 3 Jun 2014 14:42:34 +0000 (+0000) Subject: Avoid closing a pseudo-table associated with sorting in a co-routine since X-Git-Tag: version-3.8.5~1 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=d0dc5d4984ce9ff0e155a94929db118047ef1a6d;p=thirdparty%2Fsqlite.git Avoid closing a pseudo-table associated with sorting in a co-routine since that pseudo-table might be used again in an outer loop. FossilOrigin-Name: 6d81805298ea882f5fee99504d5a95f1a762a90b --- diff --git a/manifest b/manifest index 0fb3575a64..20001ad2d1 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Add\sa\stest\sto\sdouble-check\sthat\s[1cbe7a0883]\sdid\snot\saffect\sanything. -D 2014-06-03T11:32:38.148 +C Avoid\sclosing\sa\spseudo-table\sassociated\swith\ssorting\sin\sa\sco-routine\ssince\nthat\spseudo-table\smight\sbe\sused\sagain\sin\san\souter\sloop. +D 2014-06-03T14:42:34.857 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f F Makefile.in dd2b1aba364ff9b05de41086f74407f285c57670 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23 @@ -220,7 +220,7 @@ F src/printf.c af06f66927919730f03479fed6ae9854f73419f4 F src/random.c d10c1f85b6709ca97278428fd5db5bbb9c74eece F src/resolve.c 273d5f47c4e2c05b2d3d2bffeda939551ab59e66 F src/rowset.c a9c9aae3234b44a6d7c6f5a3cadf90dce1e627be -F src/select.c 7df17ec5506c2427576d412bee0e6ea740e12563 +F src/select.c 6762c62e11b504aa014edceab8886495165e3a77 F src/shell.c 98ce7f52445aa0c2eac3d4553a4cdcbb6402a670 F src/sqlite.h.in a98eb3e8c86c934ea6f5bcfc6b69653dde2f4ed4 F src/sqlite3.rc 11094cc6a157a028b301a9f06b3d03089ea37c3e @@ -726,7 +726,7 @@ F test/notnull.test f8fcf58669ddba79274daa2770d61dfad8274f62 F test/null.test a8b09b8ed87852742343b33441a9240022108993 F test/numcast.test 5d126f7f581432e86a90d1e35cac625164aec4a1 F test/openv2.test 0d3040974bf402e19b7df4b783e447289d7ab394 -F test/orderby1.test 2a6164169199ed53c99089b087ef653e480f63ac +F test/orderby1.test 12426f99518cde45f34215ca6a0ebc0e9bc5c77a F test/orderby2.test bc11009f7cd99d96b1b11e57b199b00633eb5b04 F test/orderby3.test 8619d06a3debdcd80a27c0fdea5c40b468854b99 F test/orderby4.test 4d39bfbaaa3ae64d026ca2ff166353d2edca4ba4 @@ -1173,7 +1173,7 @@ F tool/vdbe_profile.tcl 67746953071a9f8f2f668b73fe899074e2c6d8c1 F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4 F tool/warnings.sh 0abfd78ceb09b7f7c27c688c8e3fe93268a13b32 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P 1cbe7a0883e081611a50524517d70e0b6c5199d2 -R 88f7e0a0a79929d11635773b81944233 -U dan -Z 719afb30fb3906ea3990e2a028510bfb +P c6b512a724aebcd084aad2a80d020b95773b3012 +R 679d3413ba6dc377c3eacd5814f0f801 +U drh +Z d6f5ccfdba8b994a53e0334e1b572467 diff --git a/manifest.uuid b/manifest.uuid index de0da9651b..40af1ce51c 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -c6b512a724aebcd084aad2a80d020b95773b3012 \ No newline at end of file +6d81805298ea882f5fee99504d5a95f1a762a90b \ No newline at end of file diff --git a/src/select.c b/src/select.c index ba6f6551af..6ceb3fe946 100644 --- a/src/select.c +++ b/src/select.c @@ -1226,9 +1226,6 @@ static void generateSortTail( } if( pSort->regReturn ) sqlite3VdbeAddOp1(v, OP_Return, pSort->regReturn); sqlite3VdbeResolveLabel(v, addrBreak); - if( eDest==SRT_Output || eDest==SRT_Coroutine ){ - sqlite3VdbeAddOp2(v, OP_Close, pseudoTab, 0); - } } /* diff --git a/test/orderby1.test b/test/orderby1.test index 30c8df2d22..e06c9f19a0 100644 --- a/test/orderby1.test +++ b/test/orderby1.test @@ -464,4 +464,22 @@ do_execsql_test 5.2 { SELECT 5 UNION ALL SELECT 3 ORDER BY 1 } {3 5} +# The following test (originally derived from a single test within fuzz.test) +# verifies that a PseudoTable cursor is not closed prematurely in a deeply +# nested query. This test caused a segfault on 3.8.5 beta. +# +do_execsql_test 6.0 { + CREATE TABLE abc(a, b, c); + INSERT INTO abc VALUES(1, 2, 3); + INSERT INTO abc VALUES(4, 5, 6); + INSERT INTO abc VALUES(7, 8, 9); + SELECT ( + SELECT 'hardware' FROM ( + SELECT 'software' ORDER BY 'firmware' ASC, 'sportswear' DESC + ) GROUP BY 1 HAVING length(b) + ) + FROM abc; +} {hardware hardware hardware} + + finish_test