| # 2025-10-07 |
| # |
| # 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. |
| # |
| #*********************************************************************** |
| # |
| |
| set testdir [file dirname $argv0] |
| source $testdir/tester.tcl |
| set testprefix carrayfault |
| |
| ifcapable {!carray||!vtab} { |
| finish_test; return |
| } |
| |
| sqlite3 db test.db |
| |
| do_execsql_test 2.0 { |
| CREATE TABLE t1(a); |
| } |
| |
| set STMT [sqlite3_prepare_v2 db "SELECT value FROM carray(?)" -1 TAIL] |
| |
| # Test OOM faults in sqlite3_carray_bind() when binding an integer |
| # array. |
| # |
| foreach {tn mem} { |
| 1 -static |
| 2 -transient |
| 3 -malloc |
| } { |
| do_faultsim_test 2.$tn -faults oom* -prep { |
| } -body { |
| sqlite3_carray_bind $::mem -int64 $::STMT 1 100 200 300 400 |
| } -test { |
| faultsim_test_result {0 {}} {1 {out of memory}} |
| } |
| } |
| |
| # Test OOM faults in sqlite3_carray_bind() when binding a text array. |
| # |
| do_faultsim_test 3 -faults oom* -prep { |
| } -body { |
| sqlite3_carray_bind -transient -text $::STMT 1 "hello" "world" |
| } -test { |
| faultsim_test_result {0 {}} {1 {initialization of carray failed: }} |
| } |
| |
| sqlite3_finalize $STMT |
| |
| |
| # Test OOM faults when running queries against carray. |
| # |
| do_faultsim_test 4 -faults oom* -prep { |
| set ::STMT [sqlite3_prepare_v2 db "SELECT value FROM carray(?)" -1 TAIL] |
| sqlite3_carray_bind -transient -text $::STMT 1 "hello" "world" |
| } -body { |
| set myres [list] |
| while { "SQLITE_ROW"==[sqlite3_step $::STMT] } { |
| lappend myres [sqlite3_column_text $::STMT 1] |
| } |
| sqlite3_reset $::STMT |
| } -test { |
| faultsim_test_result {0 SQLITE_OK} {0 SQLITE_NOMEM} |
| sqlite3_finalize $::STMT |
| } |
| |
| # Test OOM faults when preparing queries against carray. |
| # |
| do_faultsim_test 5 -faults oom* -prep { |
| sqlite3 db test.db |
| } -body { |
| execsql "SELECT value FROM carray(?)" |
| } -test { |
| faultsim_test_result {0 {}} |
| } |
| |
| |
| |
| sqlite3_carray_bind |
| |
| finish_test |