]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Add test case for the obscure corruption detection added by the previous commit.
authordan <dan@noemail.net>
Sat, 5 Dec 2009 18:16:11 +0000 (18:16 +0000)
committerdan <dan@noemail.net>
Sat, 5 Dec 2009 18:16:11 +0000 (18:16 +0000)
FossilOrigin-Name: f221f31efff83651b9af295b98cfe98bcba3ad54

manifest
manifest.uuid
test/corrupt.test
test/fts3rnd.test

index 22fd61c115b6f0f8ef7f161f0bc33a9b949684fe..939f00c6ae70c62d775f50727020eb146a963403 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Catch\san\sobscure\scase\sof\sdatabase\scorruption.
-D 2009-12-05T18:03:51
+C Add\stest\scase\sfor\sthe\sobscure\scorruption\sdetection\sadded\sby\sthe\sprevious\scommit.
+D 2009-12-05T18:16:11
 F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0
 F Makefile.in c5827ead754ab32b9585487177c93bb00b9497b3
 F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654
@@ -290,7 +290,7 @@ F test/collateA.test b8218ab90d1fa5c59dcf156efabb1b2599c580d6
 F test/colmeta.test 087c42997754b8c648819832241daf724f813322
 F test/colname.test 08948a4809d22817e0e5de89c7c0a8bd90cb551b
 F test/conflict.test 0ed68b11f22721052d880ee80bd528a0e0828236
-F test/corrupt.test f47f220959b40f79f30c4271eefcec0587e984e3
+F test/corrupt.test 85c3fececa01bc6d24ff5d7bf1373844840c0b98
 F test/corrupt2.test a571e30ea4e82318f319a24b6cc55935ce862079
 F test/corrupt3.test 263e8bb04e2728df832fddf6973cf54c91db0c32
 F test/corrupt4.test acdb01afaedf529004b70e55de1a6f5a05ae7fff
@@ -402,7 +402,7 @@ F test/fts3expr.test 05dab77387801e4900009917bb18f556037d82da
 F test/fts3expr2.test 18da930352e5693eaa163a3eacf96233b7290d1a
 F test/fts3malloc.test d02ee86b21edd2b43044e0d6dfdcd26cb6efddcb
 F test/fts3near.test dc196dd17b4606f440c580d45b3d23aa975fd077
-F test/fts3rnd.test 151071849c9db2bade6e3d3c0c20e3a8f4f30892
+F test/fts3rnd.test 351197c4459c9d0a20e6413e5bc541a0dbfc4765
 F test/func.test af106ed834001738246d276659406823e35cde7b
 F test/func2.test 772d66227e4e6684b86053302e2d74a2500e1e0f
 F test/fuzz.test a4174c3009a3e2c2e14b31b364ebf7ddb49de2c9
@@ -776,7 +776,7 @@ F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff
 F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224
 F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
 F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f
-P 3bb13a06521b54194c9f3eb44e0dc42bacf016a4
-R c1a926ab37f61c0c2b02b1d3be3199ea
+P 0f9b17a6da42b4da667bbbc00f713effe92a66b5
+R fb94845ed98c394aab22f4eeec2551a7
 U dan
-Z dce477f25b7ac265ef79fd810e61cc32
+Z a0458738b3e670f2ae299b61dcf4c17d
index fcc047ec0e405be70989b8caf304882e0fb9599e..b04652e1dd3b5d768dfe142afd41c4f849cab276 100644 (file)
@@ -1 +1 @@
-0f9b17a6da42b4da667bbbc00f713effe92a66b5
\ No newline at end of file
+f221f31efff83651b9af295b98cfe98bcba3ad54
\ No newline at end of file
index 16f1a92169e02ce12a46f3b52a49fba0305b7225..be6236ea374817fbdf86921b8cbfe27f7887055f 100644 (file)
@@ -257,4 +257,58 @@ do_test corrupt-6.1 {
   catchsql { INSERT INTO t1 VALUES( randomblob(10) ) }
 } {1 {database disk image is malformed}}
 
+ifcapable oversize_cell_check {
+  db close
+  file delete -force test.db test.db-journal
+  sqlite3 db test.db
+  execsql { 
+    PRAGMA page_size = 1024; CREATE TABLE t1(x);
+  }
+
+  do_test corrupt-7.1 {
+    for {set i 0} {$i < 39} {incr i} {
+      execsql {
+        INSERT INTO t1 VALUES(X'000100020003000400050006000700080009000A');
+      }
+    }
+  } {}
+  db close
+  
+  # Corrupt the root page of table t1 so that the first offset in the 
+  # cell-offset array points to the data for the SQL blob associated with
+  # record (rowid=10). The root page still passes the checks in btreeInitPage(),
+  # because the start of said blob looks like the start of a legitimate 
+  # page cell.
+  #
+  # Test case cc-2 overwrites the blob so that it no longer looks like a
+  # real cell. But, by the time it is overwritten, btreeInitPage() has already
+  # initialized the root page, so no corruption is detected.
+  #
+  # Test case cc-3 inserts an extra record into t1, forcing balance-deeper
+  # to run. After copying the contents of the root page to the new child,
+  # btreeInitPage() is called on the child. This time, it detects corruption
+  # (because the start of the blob associated with the (rowid=10) record
+  # no longer looks like a real cell). At one point the code assumed that 
+  # detecting corruption was not possible at that point, and an assert() failed.
+  #
+  set fd [open test.db r+]
+  fconfigure $fd -translation binary -encoding binary
+  seek $fd [expr 1024+8]
+  puts -nonewline $fd "\x03\x14"
+  close $fd
+  
+  sqlite3 db test.db
+  do_test corrupt-7.2 {
+    execsql { 
+      UPDATE t1 SET x = X'870400020003000400050006000700080009000A' 
+      WHERE rowid = 10;
+    }
+  } {}
+  do_test corrupt-7.3 {
+    catchsql {
+      INSERT INTO t1 VALUES(X'000100020003000400050006000700080009000A');
+    }
+  } {1 {database disk image is malformed}}
+}
+
 finish_test
index 7747855bc87f24c5a2202dac9728350ac820a8ee..5acac485ff7535bc817f44c690abb8814096d0e6 100644 (file)
@@ -218,7 +218,6 @@ foreach nodesize {50 500 1000 2000} {
       do_test fts3rnd-1.$nodesize.$iTest.5.$i.$match {
         execsql { SELECT docid FROM t1 WHERE t1 MATCH $match }
       } [simple_near $terms $nNear]
-if {$::nErr} {exit -1}
     }
   }
 }