-C Prevent\sthe\sin-memory\sjournal\sread\scursor\sfrom\sentering\san\sinconsistent\sstate\nwhen\sit\sreads\sthe\slast\sfew\sbytes\sout\sof\sthe\sjournal\sfile.\s\sFix\sfor\nticket\s[7f7f8026eda38].
-D 2016-04-07T18:42:23.186
+C Add\stest\scases\sfor\sticket\s[7f7f8026eda387d544].
+D 2016-04-07T21:14:35.631
F Makefile.in eba680121821b8a60940a81454316f47a341487a
F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
F Makefile.msc 1f123a0757f6f04f0341accb46457e116817159a
F test/savepoint4.test c8f8159ade6d2acd9128be61e1230f1c1edc6cc0
F test/savepoint5.test 0735db177e0ebbaedc39812c8d065075d563c4fd
F test/savepoint6.test f41279c5e137139fa5c21485773332c7adb98cd7
-F test/savepoint7.test db3db281486c925095f305aad09fe806e5188ff3
+F test/savepoint7.test cde525ea3075283eb950cdcdefe23ead4f700daa
F test/savepointfault.test f044eac64b59f09746c7020ee261734de82bf9b2
F test/scanstatus.test 5253c219e331318a437f436268e0e82345700285
F test/schema.test 8f7999be894260f151adf15c2c7540f1c6d6a481
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P 153135bfb3b8f7c407ccf36571e2d4d5afe28ea3
-R 79f1b101d10963168c95e54e3a571e58
+P c4b9c611bdcd85f31d68aaf114ee34a9f27eba6d
+R 761448207abe334cc70f1f29da291a77
U drh
-Z fee1386714e022b25f3a73738d6ccce7
+Z 2b1e9b9a1cc02d13e96c99c5d4c59d63
-c4b9c611bdcd85f31d68aaf114ee34a9f27eba6d
\ No newline at end of file
+87aa9357fbe6749bae60e30af54ca16e48678802
\ No newline at end of file
list $rc $msg [db eval {SELECT * FROM t2}]
} {1 {abort due to ROLLBACK} {}}
+# Ticket: https://www.sqlite.org/src/tktview/7f7f8026eda387d544b
+# Segfault in the in-memory journal logic triggered by a tricky
+# combination of SAVEPOINT operations.
+#
+unset -nocomplain i
+for {set i 248} {$i<=253} {incr i} {
+ do_test savepoint7-3.$i {
+ db close
+ forcedelete test.db
+ sqlite3 db test.db
+ db eval {
+ PRAGMA page_size=1024;
+ PRAGMA temp_store=MEMORY;
+ BEGIN;
+ CREATE TABLE t1(x INTEGER PRIMARY KEY, y TEXT);
+ WITH RECURSIVE c(x) AS (VALUES(1) UNION SELECT x+1 FROM c WHERE x<$::i)
+ INSERT INTO t1(x,y) SELECT x*10, printf('%04d%.800c',x,'*') FROM c;
+ SAVEPOINT one;
+ SELECT count(*) FROM t1;
+ WITH RECURSIVE c(x) AS (VALUES(1) UNION SELECT x+1 FROM c WHERE x<$::i)
+ INSERT INTO t1(x,y) SELECT x*10+1, printf('%04d%.800c',x,'*') FROM c;
+ ROLLBACK TO one;
+ SELECT count(*) FROM t1;
+ SAVEPOINT twoB;
+ WITH RECURSIVE c(x) AS (VALUES(1) UNION SELECT x+1 FROM c WHERE x<10)
+ INSERT INTO t1(x,y) SELECT x*10+2, printf('%04d%.800c',x,'*') FROM c;
+ ROLLBACK TO twoB;
+ RELEASE one;
+ COMMIT;
+ }
+ } [list $i $i]
+}
+
+
finish_test