Index: third_party/sqlite/src/ext/fts5/test/fts5corrupt3.test |
diff --git a/third_party/sqlite/src/ext/fts5/test/fts5corrupt3.test b/third_party/sqlite/src/ext/fts5/test/fts5corrupt3.test |
index dd70f31a6b5ad37429035e617326c9aa99c770f0..9653bcaac20a36c27714caff959fdc7fca0d18d6 100644 |
--- a/third_party/sqlite/src/ext/fts5/test/fts5corrupt3.test |
+++ b/third_party/sqlite/src/ext/fts5/test/fts5corrupt3.test |
@@ -179,6 +179,10 @@ for {set i 1} {1} {incr i} { |
if {$end<=$i} break |
lset var end [expr $end - $i] |
set struct [binary format c* $var] |
+ |
+ db close |
+ sqlite3 db test.db |
+ |
db eval { |
BEGIN; |
UPDATE t1_data SET block = $struct WHERE id=10; |
@@ -334,12 +338,9 @@ do_catchsql_test 6.3.5 { |
} {1 {database disk image is malformed}} |
-} |
- |
#------------------------------------------------------------------------ |
# |
reset_db |
-reset_db |
proc rnddoc {n} { |
set map [list a b c d] |
set doc [list] |
@@ -371,6 +372,41 @@ do_test 7.1 { |
} |
} {} |
+} |
+ |
+#------------------------------------------------------------------------ |
+# Corruption within the structure record. |
+# |
+reset_db |
+do_execsql_test 8.1 { |
+ CREATE VIRTUAL TABLE t1 USING fts5(x, y); |
+ INSERT INTO t1 VALUES('one', 'two'); |
+} |
+ |
+do_test 9.1.1 { |
+ set blob "12345678" ;# cookie |
+ append blob "0105" ;# 1 level, total of 5 segments |
+ append blob "06" ;# write counter |
+ append blob "0002" ;# first level has 0 segments merging, 2 other. |
+ append blob "450108" ;# first segment |
+ execsql "REPLACE INTO t1_data VALUES(10, X'$blob')" |
+} {} |
+do_catchsql_test 9.1.2 { |
+ SELECT * FROM t1('one AND two'); |
+} {1 {database disk image is malformed}} |
+ |
+do_test 9.2.1 { |
+ set blob "12345678" ;# cookie |
+ append blob "0205" ;# 2 levels, total of 5 segments |
+ append blob "06" ;# write counter |
+ append blob "0001" ;# first level has 0 segments merging, 1 other. |
+ append blob "450108" ;# first segment |
+ execsql "REPLACE INTO t1_data VALUES(10, X'$blob')" |
+} {} |
+do_catchsql_test 9.2.2 { |
+ SELECT * FROM t1('one AND two'); |
+} {1 {database disk image is malformed}} |
+ |
sqlite3_fts5_may_be_corrupt 0 |
finish_test |