From: dan Date: Wed, 14 Jul 2010 07:06:47 +0000 (+0000) Subject: Test that a corrupted WAL hash-table does not put the library into an infinite loop. X-Git-Tag: version-3.7.2~135 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=c385793495024b0c13d9a5323efd82b69c4a97d3;p=thirdparty%2Fsqlite.git Test that a corrupted WAL hash-table does not put the library into an infinite loop. FossilOrigin-Name: c73886ed7497c0daf798c3b02ca6f5a1c2addde3 --- diff --git a/manifest b/manifest index 058238449f..2ff229c558 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sa\stypo\sin\sthe\sIS_BIG_INT\smacro\sused\sby\scoverage\stest\sinstrumentation. -D 2010-07-14T06:20:27 +C Test\sthat\sa\scorrupted\sWAL\shash-table\sdoes\snot\sput\sthe\slibrary\sinto\san\sinfinite\sloop. +D 2010-07-14T07:06:48 F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0 F Makefile.in ec08dc838fd8110fe24c92e5130bcd91cbb1ff2e F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654 @@ -776,7 +776,7 @@ F test/vtab_alter.test 9e374885248f69e251bdaacf480b04a197f125e5 F test/vtab_err.test 0d4d8eb4def1d053ac7c5050df3024fd47a3fbd8 F test/vtab_shared.test 0eff9ce4f19facbe0a3e693f6c14b80711a4222d F test/wal.test 1891e6f72dd437a1c2a48091aa9182ba17a8f780 -F test/wal2.test f4e96e3b793cdc20a45031d3f1173e67f6cc44ec +F test/wal2.test 85775a7f68013f8734da8f5131c108e29cdbe868 F test/wal3.test d2ae7e66f973bd6b58ce49e546b2c00f44fe0485 F test/wal4.test 640be93f5422df37203aa5e7c06b24fb5e4a2439 F test/wal_common.tcl 895d76138043b86bdccf36494054bdabcf65837b @@ -834,7 +834,7 @@ F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224 F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f -P 90d73c66bfa880cdeb688b3016c8b1c58bfcf35f -R d25f37ac17323937dfd921db79d60eda +P 5314ca3928dab1c76fa4ec5dbe110e3212c95e9f +R 0b5ec8b4983e94c7c92570f220ab5e66 U dan -Z ff2d33ba3ce5ee4d6c12121b51ff3660 +Z 52c880220531a7798727e625d1f7aefa diff --git a/manifest.uuid b/manifest.uuid index fd1b4220ee..314eb7d8f2 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -5314ca3928dab1c76fa4ec5dbe110e3212c95e9f \ No newline at end of file +c73886ed7497c0daf798c3b02ca6f5a1c2addde3 \ No newline at end of file diff --git a/test/wal2.test b/test/wal2.test index 6d87f0e750..4cdb2254b3 100644 --- a/test/wal2.test +++ b/test/wal2.test @@ -949,6 +949,54 @@ do_test wal2-10.2.3 { set_tvfs_hdr $::filename $hdr catchsql { SELECT * FROM t1 } } {1 {unable to open database file}} +db close +tvfs delete + +#------------------------------------------------------------------------- +# This block of tests - wal2-11.* - tests that it is not possible to put +# the library into an infinite loop by presenting it with a corrupt +# hash table (one that appears to contain a single chain of infinite +# length). +# +# wal2-11.1.*: While reading the hash-table. +# +# wal2-11.2.*: While writing the hash-table. +# +testvfs tvfs -default 1 +do_test wal2-11.0 { + faultsim_delete_and_reopen + execsql { + PRAGMA journal_mode = WAL; + CREATE TABLE t1(a, b, c); + INSERT INTO t1 VALUES(1, 2, 3); + INSERT INTO t1 VALUES(4, 5, 6); + INSERT INTO t1 VALUES(7, 8, 9); + SELECT * FROM t1; + } +} {wal 1 2 3 4 5 6 7 8 9} + +do_test wal2-11.1.1 { + sqlite3 db2 test.db + execsql { SELECT name FROM sqlite_master } db2 +} {t1} + +# Fill up the hash table on the first page of shared memory with 0x55 bytes. +# +set blob [string range [tvfs shm $::filename] 0 16383] +append blob [string repeat [binary format c 0x55] 16384] +tvfs shm $::filename $blob + +do_test wal2-11.2 { + catchsql { SELECT * FROM t1 } db2 +} {1 {database disk image is malformed}} + +do_test wal2-12.1 { + catchsql { INSERT INTO t1 VALUES(10, 11, 12) } +} {1 {database disk image is malformed}} + +db close +db2 close +tvfs delete finish_test