1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
|
# 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
|