]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Fix OOM error on ANALYZE with STAT2 enabled with zero-length data. Ticket [cbd054fa6b].
authorshaneh <shaneh@noemail.net>
Fri, 26 Mar 2010 01:54:33 +0000 (01:54 +0000)
committershaneh <shaneh@noemail.net>
Fri, 26 Mar 2010 01:54:33 +0000 (01:54 +0000)
FossilOrigin-Name: c33b38b59f733494ca0bce3f59a669fe7ed76b9f

configure [changed mode: 0755->0644]
install-sh [changed mode: 0755->0644]
manifest
manifest.uuid
src/analyze.c
test/tkt-cbd054fa6b.test [new file with mode: 0644]

old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
index 12cd2d5b17ba53aa7991f3ce2576d238d029cf0e..d55c804f68624bfa98dcadacb97233d4491a0002 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Fix\sfor\s[9861b74ab9].\sCorrectly\shandle\sstrings\swith\szero\stokens\sin\sthe\sfts3\soffsets()\sfunction.
-D 2010-03-24T15:57:33
+C Fix\sOOM\serror\son\sANALYZE\swith\sSTAT2\senabled\swith\szero-length\sdata.\sTicket\s[cbd054fa6b].
+D 2010-03-26T01:54:33
 F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0
 F Makefile.in 4f2f967b7e58a35bb74fb7ec8ae90e0f4ca7868b
 F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654
@@ -19,7 +19,7 @@ F art/src_logo.gif 9341ef09f0e53cd44c0c9b6fc3c16f7f3d6c2ad9
 F config.guess 226d9a188c6196f3033ffc651cbc9dcee1a42977
 F config.h.in 868fdb48c028421a203470e15c69ada15b9ba673
 F config.sub 9ebe4c3b3dab6431ece34f16828b594fb420da55
-F configure 72c0ad7c8cfabbffeaf8ca61e1d24143cf857eb2 x
+F configure 72c0ad7c8cfabbffeaf8ca61e1d24143cf857eb2
 F configure.ac 14740970ddb674d92a9f5da89083dff1179014ff
 F contrib/sqlitecon.tcl 210a913ad63f9f991070821e599d600bd913e0ad
 F doc/lemon.html f0f682f50210928c07e562621c3b7e8ab912a538
@@ -87,7 +87,7 @@ F ext/rtree/rtree_perf.tcl 6c18c1f23cd48e0f948930c98dfdd37dfccb5195
 F ext/rtree/rtree_util.tcl 06aab2ed5b826545bf215fff90ecb9255a8647ea
 F ext/rtree/tkt3363.test 2bf324f7908084a5f463de3109db9c6e607feb1b
 F ext/rtree/viewrtree.tcl eea6224b3553599ae665b239bd827e182b466024
-F install-sh 9d4de14ab9fb0facae2f48780b874848cbf2f895 x
+F install-sh 9d4de14ab9fb0facae2f48780b874848cbf2f895
 F ltmain.sh 3ff0879076df340d2e23ae905484d8c15d5fdea8
 F main.mk a36a05a481afcc00388c4d6d4db0e12cacb546e3
 F mkdll.sh 7d09b23c05d56532e9d44a50868eb4b12ff4f74a
@@ -103,7 +103,7 @@ F sqlite.pc.in 42b7bf0d02e08b9e77734a47798d1a55a9e0716b
 F sqlite3.1 6be1ad09113570e1fc8dcaff84c9b0b337db5ffc
 F sqlite3.pc.in ae6f59a76e862f5c561eb32a380228a02afc3cad
 F src/alter.c e6f4d11b1c0b23642fc46bac9abe0753c4294e05
-F src/analyze.c 92a65a5a402898a52b03695c7f0cd383724d711f
+F src/analyze.c 8dfd781ac326496746ecdfc3e099250ed5d79be5
 F src/attach.c 7abe1607c2054585377cdba3c219e8572f84ca5e
 F src/auth.c 523da7fb4979469955d822ff9298352d6b31de34
 F src/backup.c b293534bc2df23c57668a585b17ee7faaaef0939
@@ -616,6 +616,7 @@ F test/tkt-4a03edc4c8.test 2865e4edbc075b954daa82f8da7cc973033ec76e
 F test/tkt-5ee23731f.test 3581260f2a71e51db94e1506ba6b0f7311d002a9
 F test/tkt-78e04e52ea.test fb5430c675e708f5cbafdf3e7e5593da5145a527
 F test/tkt-94c04eaadb.test be5ea61cb04dfdc047d19b5c5a9e75fa3da67a7f
+F test/tkt-cbd054fa6b.test f14f97ea43662e6f70c9e63287081e8be5d9d589
 F test/tkt-d82e3f3721.test 731359dfdcdb36fea0559cd33fec39dd0ceae8e6
 F test/tkt-f777251dc7a.test 6f24c053bc5cdb7e1e19be9a72c8887cf41d5e87
 F test/tkt1435.test f8c52c41de6e5ca02f1845f3a46e18e25cadac00
@@ -793,7 +794,7 @@ F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff
 F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224
 F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
 F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f
-P be278979917336e7186d7830876180154b5280ba
-R 6bbbd4e14a2d996a1a670e3cf1c5912f
-U dan
-Z 53e87a02495e18ae66f9c4a591836541
+P d37034f7fc46b83be681247fde97823736c994cc
+R f632179d00144c3248d5550420baa55a
+U shaneh
+Z 000ac439cfaa4b57f906b494905bfe51
index 43ee8954060f8f6e7f48bcf7311a88e0dc412680..6a94a709b400b09cb360c3f0418efdd1da1bff48 100644 (file)
@@ -1 +1 @@
-d37034f7fc46b83be681247fde97823736c994cc
\ No newline at end of file
+c33b38b59f733494ca0bce3f59a669fe7ed76b9f
\ No newline at end of file
index 283a0e9d1e528fb3122d52e4e0e619b89cbebdbb..72983412d3185cd2e38d6c9bc8941bba5941e9e0 100644 (file)
@@ -618,12 +618,16 @@ int sqlite3AnalysisLoad(sqlite3 *db, int iDb){
                   n = 24;
                 }
                 pSample->nByte = (u8)n;
-                pSample->u.z = sqlite3DbMallocRaw(dbMem, n);
-                if( pSample->u.z ){
-                  memcpy(pSample->u.z, z, n);
+                if( n < 1){
+                  pSample->u.z = 0;
                 }else{
-                  db->mallocFailed = 1;
-                  break;
+                  pSample->u.z = sqlite3DbMallocRaw(dbMem, n);
+                  if( pSample->u.z ){
+                    memcpy(pSample->u.z, z, n);
+                  }else{
+                    db->mallocFailed = 1;
+                    break;
+                  }
                 }
               }
             }
diff --git a/test/tkt-cbd054fa6b.test b/test/tkt-cbd054fa6b.test
new file mode 100644 (file)
index 0000000..6e7455b
--- /dev/null
@@ -0,0 +1,87 @@
+# 2010 March 25
+#
+# The author disclaims copyright to this source code.  In place of
+# a legal notice, here is a blessing:
+#
+#    May you do good and not evil.
+#    May you find forgiveness for yourself and forgive others.
+#    May you share freely, never taking more than you give.
+#
+#***********************************************************************
+#
+# This file implements tests to verify that ticket [cbd054fa6b] has been
+# fixed.  
+#
+
+set testdir [file dirname $argv0]
+source $testdir/tester.tcl
+
+ifcapable !stat2 {
+  finish_test
+  return
+}
+
+do_test tkt-cbd05-1.1 {
+  db eval {
+    CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT UNIQUE NOT NULL);
+    CREATE INDEX t1_x ON t1(b);
+    INSERT INTO t1 VALUES (NULL, '');
+    INSERT INTO t1 VALUES (NULL, 'A');
+    INSERT INTO t1 VALUES (NULL, 'B');
+    INSERT INTO t1 VALUES (NULL, 'C');
+    INSERT INTO t1 VALUES (NULL, 'D');
+    INSERT INTO t1 VALUES (NULL, 'E');
+    INSERT INTO t1 VALUES (NULL, 'F');
+    INSERT INTO t1 VALUES (NULL, 'G');
+    INSERT INTO t1 VALUES (NULL, 'H');
+    INSERT INTO t1 VALUES (NULL, 'I');
+    SELECT count(*) FROM t1;
+  }
+} {10}
+do_test tkt-cbd05-1.2 {
+  db eval {
+    ANALYZE;
+  }
+} {}
+do_test tkt-cbd05-1.3 {
+  execsql { 
+    SELECT tbl,idx,group_concat(sample,' ') 
+    FROM sqlite_stat2 
+    WHERE idx = 't1_x' 
+    GROUP BY tbl,idx
+  }
+} {t1 t1_x { A B C D E F G H I}}
+
+do_test tkt-cbd05-2.1 {
+  db eval {
+    DROP TABLE t1;
+    CREATE TABLE t1(a INTEGER PRIMARY KEY, b BLOB UNIQUE NOT NULL);
+    CREATE INDEX t1_x ON t1(b);
+    INSERT INTO t1 VALUES(NULL, X'');
+    INSERT INTO t1 VALUES(NULL, X'41');
+    INSERT INTO t1 VALUES(NULL, X'42');
+    INSERT INTO t1 VALUES(NULL, X'43');
+    INSERT INTO t1 VALUES(NULL, X'44');
+    INSERT INTO t1 VALUES(NULL, X'45');
+    INSERT INTO t1 VALUES(NULL, X'46');
+    INSERT INTO t1 VALUES(NULL, X'47');
+    INSERT INTO t1 VALUES(NULL, X'48');
+    INSERT INTO t1 VALUES(NULL, X'49');
+    SELECT count(*) FROM t1;
+  }
+} {10}
+do_test tkt-cbd05-2.2 {
+  db eval {
+    ANALYZE;
+  }
+} {}
+do_test tkt-cbd05-2.3 {
+  execsql { 
+    SELECT tbl,idx,group_concat(sample,' ') 
+    FROM sqlite_stat2 
+    WHERE idx = 't1_x' 
+    GROUP BY tbl,idx
+  }
+} {t1 t1_x { A B C D E F G H I}}
+
+finish_test