]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Make sure the WhereLoop.aLTerm[] array is large enough when processing
authordrh <drh@noemail.net>
Mon, 23 Dec 2013 15:35:54 +0000 (15:35 +0000)
committerdrh <drh@noemail.net>
Mon, 23 Dec 2013 15:35:54 +0000 (15:35 +0000)
the skip-scan optimization.  Fix for ticket [520070ec7fbaac].

FossilOrigin-Name: ac5852d6403c9c9628ca0aa7be135c702f000698

manifest
manifest.uuid
src/where.c
test/skipscan1.test

index 264b3fc190a79a3a1f01e7afd6abd9e0ae6426ff..3cc0639fb6cfd590a2faa7e8a6af3a322d6a2a24 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Version\s3.8.2
-D 2013-12-06T14:53:30.888
+C Make\ssure\sthe\sWhereLoop.aLTerm[]\sarray\sis\slarge\senough\swhen\sprocessing\nthe\sskip-scan\soptimization.\s\sFix\sfor\sticket\s[520070ec7fbaac].
+D 2013-12-23T15:35:54.039
 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
 F Makefile.in e1a9b4258bbde53f5636f4e238c65b7e11459e2b
 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
@@ -293,7 +293,7 @@ F src/vtab.c 21b932841e51ebd7d075e2d0ad1415dce8d2d5fd
 F src/wal.c 7dc3966ef98b74422267e7e6e46e07ff6c6eb1b4
 F src/wal.h df01efe09c5cb8c8e391ff1715cca294f89668a4
 F src/walker.c e9e593d5bb798c3e67fc3893dfe7055c9e7d8d74
-F src/where.c e6a4e713abe6f995495ea53dd6a5e48f88b53883
+F src/where.c 3b589eee28271c4a7cbdb11f0312e1dc2013c255
 F src/whereInt.h 96a75c61f1d2b9d4a8e4bb17d89deb0cf7cba358
 F test/8_3_names.test ebbb5cd36741350040fd28b432ceadf495be25b2
 F test/aggerror.test a867e273ef9e3d7919f03ef4f0e8c0d2767944f2
@@ -807,7 +807,7 @@ F test/shell5.test 46c8c18d62732415c4fe084816c13d559831705e
 F test/shortread1.test bb591ef20f0fd9ed26d0d12e80eee6d7ac8897a3
 F test/shrink.test 8c70f62b6e8eb4d54533de6d65bd06b1b9a17868
 F test/sidedelete.test f0ad71abe6233e3b153100f3b8d679b19a488329
-F test/skipscan1.test 6bb4891c2cc5efd5690a9da9e7508e53d4a68e10
+F test/skipscan1.test 8c777ffd9dad6ee6d2568160cb2158f0b5cd9dd2
 F test/skipscan2.test 5a4db0799c338ddbacb154aaa5589c0254b36a8d
 F test/soak.test 0b5b6375c9f4110c828070b826b3b4b0bb65cd5f
 F test/softheap1.test 40562fe6cac6d9827b7b42b86d45aedf12c15e24
@@ -1145,10 +1145,11 @@ F tool/vdbe-compress.tcl f12c884766bd14277f4fcedcae07078011717381
 F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
 F tool/warnings.sh d1a6de74685f360ab718efda6265994b99bbea01
 F tool/win/sqlite.vsix 030f3eeaf2cb811a3692ab9c14d021a75ce41fff
-P c632567063d81c4be404ce58cbac0eff7412f565
-R 39f74301df16683d1c19ab7ca83b6451
-T +bgcolor * #d0c0ff
-T +sym-release *
-T +sym-version-3.8.2 *
-U dan
-Z bddf39b758268961698f9899546a37dd
+P 27392118af4c38c5203a04b8013e1afdb1cebd0d
+Q +46d040591f27be01b1860344f8a268797fe344f4
+R f261db23702291147b2b492eeebe71a1
+T *branch * branch-3.8.2
+T *sym-branch-3.8.2 *
+T -sym-trunk *
+U drh
+Z 4d3959d186d58f8ebce7f5fa0f32ef2d
index 5097db9159d2801dd63d381321868d2a6a0f1cb5..a68bd007996b31cb146e471fb721f4832fc39bc5 100644 (file)
@@ -1 +1 @@
-27392118af4c38c5203a04b8013e1afdb1cebd0d
\ No newline at end of file
+ac5852d6403c9c9628ca0aa7be135c702f000698
\ No newline at end of file
index 7d3ec48dacd70053ac91aca565de806e9bbcf124..cfbf769c67fdd0e0890e9b2aa93e047813bf3892 100644 (file)
@@ -3928,6 +3928,7 @@ static int whereLoopAddBtreeIndex(
    && saved_nEq==saved_nSkip
    && saved_nEq+1<pProbe->nKeyCol
    && pProbe->aiRowEst[saved_nEq+1]>=18  /* TUNING: Minimum for skip-scan */
+   && (rc = whereLoopResize(db, pNew, pNew->nLTerm+1))==SQLITE_OK
   ){
     LogEst nIter;
     pNew->u.btree.nEq++;
index 622e48fcfa061267d5628235518d5e12c42fbe15..b9eaf2729bf8be2cfd48b1c4066153cc7ebaaab4 100644 (file)
@@ -187,4 +187,26 @@ do_execsql_test skipscan1-3.2sort {
   SELECT a,b,c,d,'|' FROM t3 WHERE b=345 ORDER BY a;
 } {~/*ORDER BY*/}
 
+# Ticket 520070ec7fbaac: Array overrun in the skip-scan optimization
+# 2013-12-22
+#
+do_execsql_test skipscan1-4.1 {
+  CREATE TABLE t4(a,b,c,d,e,f,g,h,i);
+  CREATE INDEX t4all ON t4(a,b,c,d,e,f,g,h);
+  INSERT INTO t4 VALUES(1,2,3,4,5,6,7,8,9);
+  ANALYZE;
+  DELETE FROM sqlite_stat1;
+  INSERT INTO sqlite_stat1 
+    VALUES('t4','t4all','655360 163840 40960 10240 2560 640 160 40 10');
+  ANALYZE sqlite_master;
+  SELECT i FROM t4 WHERE a=1;
+  SELECT i FROM t4 WHERE b=2;
+  SELECT i FROM t4 WHERE c=3;
+  SELECT i FROM t4 WHERE d=4;
+  SELECT i FROM t4 WHERE e=5;
+  SELECT i FROM t4 WHERE f=6;
+  SELECT i FROM t4 WHERE g=7;
+  SELECT i FROM t4 WHERE h=8;
+} {9 9 9 9 9 9 9 9}
+
 finish_test