Index: third_party/sqlite/sqlite-src-3100200/test/symlink.test |
diff --git a/third_party/sqlite/sqlite-src-3100200/test/symlink.test b/third_party/sqlite/sqlite-src-3100200/test/symlink.test |
new file mode 100644 |
index 0000000000000000000000000000000000000000..790624161f3aca9e34c7b602edbc2d1de78a2a6b |
--- /dev/null |
+++ b/third_party/sqlite/sqlite-src-3100200/test/symlink.test |
@@ -0,0 +1,129 @@ |
+# 2015 October 31 |
+# |
+# 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 regression tests for SQLite library. The |
+# focus of this file is testing that SQLite can follow symbolic links. |
+# |
+ |
+set testdir [file dirname $argv0] |
+source $testdir/tester.tcl |
+set testprefix symlink |
+ |
+# This only runs on unix. |
+if {$::tcl_platform(platform)!="unix"} { |
+ finish_test |
+ return |
+} |
+ |
+# Ensure that test.db has been created. |
+# |
+do_execsql_test 1.0 { |
+ CREATE TABLE t1(x, y); |
+} |
+ |
+# Test that SQLite follows symlinks when opening files. |
+# |
+forcedelete test.db2 |
+do_test 1.1 { |
+ file link test.db2 test.db |
+ sqlite3 db2 test.db2 |
+ sqlite3_db_filename db2 main |
+} [file join [pwd] test.db] |
+ |
+# Test that if the symlink points to a file that does not exists, it is |
+# created when it is opened. |
+# |
+do_test 1.2.1 { |
+ db2 close |
+ db close |
+ forcedelete test.db |
+ file exists test.db |
+} 0 |
+do_test 1.2.2 { |
+ sqlite3 db2 test.db2 |
+ file exists test.db |
+} 1 |
+do_test 1.2.3 { |
+ sqlite3_db_filename db2 main |
+} [file join [pwd] test.db] |
+db2 close |
+ |
+# Test that a loop of symlinks cannot be opened. |
+# |
+do_test 1.3 { |
+ forcedelete test.db |
+ # Note: Tcl [file link] command is too smart to create loops of symlinks. |
+ exec ln -s test.db2 test.db |
+ list [catch { sqlite3 db test.db } msg] $msg |
+} {1 {unable to open database file}} |
+ |
+# Test that overly large paths cannot be opened. |
+# |
+do_test 1.4 { |
+ set name "test.db[string repeat x 502]" |
+ list [catch { sqlite3 db $name } msg] $msg |
+} {1 {unable to open database file}} |
+do_test 1.5 { |
+ set r [expr 510 - [string length test.db] - [string length [pwd]]] |
+ set name "test.db[string repeat x $r]" |
+ list [catch { sqlite3 db $name } msg] $msg |
+} {1 {unable to open database file}} |
+ |
+#------------------------------------------------------------------------- |
+# Test that journal and wal files are created next to the real file, |
+# not the symlink. |
+# |
+do_test 2.0 { |
+ catch { db close } |
+ catch { db2 close } |
+ forcedelete test.db test.db2 |
+ sqlite3 db test.db |
+ execsql { CREATE TABLE t1(x) } |
+ file link test.db2 test.db |
+ sqlite3 db2 test.db2 |
+ file exists test.db-journal |
+} 0 |
+ |
+do_test 2.1 { |
+ execsql { |
+ BEGIN; |
+ INSERT INTO t1 VALUES(1); |
+ } db2 |
+ file exists test.db-journal |
+} 1 |
+do_test 2.2 { |
+ file exists test.db2-journal |
+} 0 |
+do_test 2.3 { |
+ execsql { |
+ COMMIT; |
+ PRAGMA journal_mode = wal; |
+ INSERT INTO t1 VALUES(2); |
+ } db2 |
+ file exists test.db-wal |
+} 1 |
+do_test 2.4 { |
+ file exists test.db2-wal |
+} 0 |
+do_execsql_test 2.5 { |
+ SELECT * FROM t1; |
+} {1 2} |
+ |
+# Try to open a ridiculously long pathname. Bug found by |
+# Kostya Serebryany using libFuzzer on 2015-11-30. |
+# |
+do_test 3.1 { |
+ db close |
+ catch {sqlite3 db [string repeat [string repeat x 100]/ 6]} res |
+ set res |
+} {unable to open database file} |
+ |
+ |
+finish_test |