Index: third_party/sqlite/src/test/gcfault.test |
diff --git a/third_party/sqlite/src/test/gcfault.test b/third_party/sqlite/src/test/gcfault.test |
new file mode 100644 |
index 0000000000000000000000000000000000000000..d54b78fafcba1951b4fa674733f3026cdc2e652c |
--- /dev/null |
+++ b/third_party/sqlite/src/test/gcfault.test |
@@ -0,0 +1,56 @@ |
+# 2016 December 30 |
+# |
+# 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 OOM error handling within the built-in |
+# group_concat() function. |
+# |
+ |
+set testdir [file dirname $argv0] |
+source $testdir/tester.tcl |
+set testprefix gcfault |
+ |
+ |
+foreach {enc} { |
+ utf16 |
+ utf8 |
+} { |
+ reset_db |
+ sqlite3_db_config_lookaside db 0 0 0 |
+ execsql "PRAGMA encoding = $enc" |
+ |
+ do_execsql_test 1.$enc.1 { |
+ CREATE TABLE s(i, s); |
+ INSERT INTO s VALUES(1, ',0123456789,'); |
+ INSERT INTO s VALUES(2, X'2c303132333435363738392c'); |
+ |
+ CREATE TABLE e(e); |
+ INSERT INTO e VALUES('v1'), ('v2'); |
+ } {} |
+ |
+ do_faultsim_test 1.$enc.1 -faults oom* -body { |
+ execsql { SELECT group_concat(e, (SELECT s FROM s WHERE i=1)) FROM e } |
+ } |
+ |
+ do_faultsim_test 1.$enc.2 -faults oom-t* -body { |
+ execsql { SELECT group_concat(e, (SELECT s FROM s WHERE i=2)) FROM e } |
+ } |
+ |
+ do_faultsim_test 1.$enc.3 -faults oom-t* -prep { |
+ set ::STMT [sqlite3_prepare db {SELECT group_concat(e, ?) FROM e} -1 dummy] |
+ sqlite3_bind_text $::STMT 1 ",0123456789," 12 |
+ } -body { |
+ while { "SQLITE_ROW"==[sqlite3_step $::STMT] } { } |
+ } -test { |
+ sqlite3_finalize $::STMT |
+ } |
+} |
+ |
+finish_test |