mirror of
https://github.com/sqlite/sqlite.git
synced 2025-07-30 19:03:16 +03:00
Fix all known instances of signed-integer overflow. Within SQL expressions,
integer overflow now forces coercion to floating point. The shift operators work with any integer right-hand operand with negative values reversing the direction of the shift. FossilOrigin-Name: abf21394124a0af46f072793718964cee2ce55d0
This commit is contained in:
119
test/expr.test
119
test/expr.test
@ -82,8 +82,18 @@ test_expr expr-1.43 {i1=1, i2=2} {i1&i2} {0}
|
||||
test_expr expr-1.43b {i1=1, i2=2} {4&5} {4}
|
||||
test_expr expr-1.44 {i1=1} {~i1} {-2}
|
||||
test_expr expr-1.44b {i1=NULL} {~i1} {{}}
|
||||
test_expr expr-1.45 {i1=1, i2=3} {i1<<i2} {8}
|
||||
test_expr expr-1.46 {i1=32, i2=3} {i1>>i2} {4}
|
||||
test_expr expr-1.45a {i1=1, i2=3} {i1<<i2} {8}
|
||||
test_expr expr-1.45b {i1=1, i2=-3} {i1>>i2} {8}
|
||||
test_expr expr-1.45c {i1=1, i2=0} {i1<<i2} {1}
|
||||
test_expr expr-1.45d {i1=1, i2=62} {i1<<i2} {4611686018427387904}
|
||||
test_expr expr-1.45e {i1=1, i2=63} {i1<<i2} {-9223372036854775808}
|
||||
test_expr expr-1.45f {i1=1, i2=64} {i1<<i2} {0}
|
||||
test_expr expr-1.45g {i1=32, i2=-9223372036854775808} {i1>>i2} {0}
|
||||
test_expr expr-1.46a {i1=32, i2=3} {i1>>i2} {4}
|
||||
test_expr expr-1.46b {i1=32, i2=6} {i1>>i2} {0}
|
||||
test_expr expr-1.46c {i1=-32, i2=3} {i1>>i2} {-4}
|
||||
test_expr expr-1.46d {i1=-32, i2=100} {i1>>i2} {-1}
|
||||
test_expr expr-1.46e {i1=32, i2=-3} {i1>>i2} {256}
|
||||
test_expr expr-1.47 {i1=9999999999, i2=8888888888} {i1<i2} 0
|
||||
test_expr expr-1.48 {i1=9999999999, i2=8888888888} {i1=i2} 0
|
||||
test_expr expr-1.49 {i1=9999999999, i2=8888888888} {i1>i2} 1
|
||||
@ -154,10 +164,10 @@ ifcapable floatingpoint {
|
||||
}
|
||||
|
||||
if {[working_64bit_int]} {
|
||||
test_expr expr-1.106 {i1=0} {(1<<63)/-1} -9223372036854775808
|
||||
test_expr expr-1.106 {i1=0} {-9223372036854775808/-1} 9.22337203685478e+18
|
||||
}
|
||||
|
||||
test_expr expr-1.107 {i1=0} {(1<<63)%-1} 0
|
||||
test_expr expr-1.107 {i1=0} {-9223372036854775808%-1} 0
|
||||
test_expr expr-1.108 {i1=0} {1%0} {{}}
|
||||
test_expr expr-1.109 {i1=0} {1/0} {{}}
|
||||
|
||||
@ -190,6 +200,107 @@ test_expr expr-1.125 {i1=6, i2=NULL} \
|
||||
test_expr expr-1.126 {i1=8, i2=8} \
|
||||
{CASE WHEN i1 IS NOT i2 THEN 'yes' ELSE 'no' END} no
|
||||
|
||||
ifcapable floatingpoint {if {[working_64bit_int]} {
|
||||
test_expr expr-1.200\
|
||||
{i1=9223372036854775806, i2=1} {i1+i2} 9223372036854775807
|
||||
test_expr expr-1.201\
|
||||
{i1=9223372036854775806, i2=2} {i1+i2} 9.22337203685478e+18
|
||||
test_expr expr-1.202\
|
||||
{i1=9223372036854775806, i2=100000} {i1+i2} 9.22337203685488e+18
|
||||
test_expr expr-1.203\
|
||||
{i1=9223372036854775807, i2=0} {i1+i2} 9223372036854775807
|
||||
test_expr expr-1.204\
|
||||
{i1=9223372036854775807, i2=1} {i1+i2} 9.22337203685478e+18
|
||||
test_expr expr-1.205\
|
||||
{i2=9223372036854775806, i1=1} {i1+i2} 9223372036854775807
|
||||
test_expr expr-1.206\
|
||||
{i2=9223372036854775806, i1=2} {i1+i2} 9.22337203685478e+18
|
||||
test_expr expr-1.207\
|
||||
{i2=9223372036854775806, i1=100000} {i1+i2} 9.22337203685488e+18
|
||||
test_expr expr-1.208\
|
||||
{i2=9223372036854775807, i1=0} {i1+i2} 9223372036854775807
|
||||
test_expr expr-1.209\
|
||||
{i2=9223372036854775807, i1=1} {i1+i2} 9.22337203685478e+18
|
||||
test_expr expr-1.210\
|
||||
{i1=-9223372036854775807, i2=-1} {i1+i2} -9223372036854775808
|
||||
test_expr expr-1.211\
|
||||
{i1=-9223372036854775807, i2=-2} {i1+i2} -9.22337203685478e+18
|
||||
test_expr expr-1.212\
|
||||
{i1=-9223372036854775807, i2=-100000} {i1+i2} -9.22337203685488e+18
|
||||
test_expr expr-1.213\
|
||||
{i1=-9223372036854775808, i2=0} {i1+i2} -9223372036854775808
|
||||
test_expr expr-1.214\
|
||||
{i1=-9223372036854775808, i2=-1} {i1+i2} -9.22337203685478e+18
|
||||
test_expr expr-1.215\
|
||||
{i2=-9223372036854775807, i1=-1} {i1+i2} -9223372036854775808
|
||||
test_expr expr-1.216\
|
||||
{i2=-9223372036854775807, i1=-2} {i1+i2} -9.22337203685478e+18
|
||||
test_expr expr-1.217\
|
||||
{i2=-9223372036854775807, i1=-100000} {i1+i2} -9.22337203685488e+18
|
||||
test_expr expr-1.218\
|
||||
{i2=-9223372036854775808, i1=0} {i1+i2} -9223372036854775808
|
||||
test_expr expr-1.219\
|
||||
{i2=-9223372036854775808, i1=-1} {i1+i2} -9.22337203685478e+18
|
||||
test_expr expr-1.220\
|
||||
{i1=9223372036854775806, i2=-1} {i1-i2} 9223372036854775807
|
||||
test_expr expr-1.221\
|
||||
{i1=9223372036854775806, i2=-2} {i1-i2} 9.22337203685478e+18
|
||||
test_expr expr-1.222\
|
||||
{i1=9223372036854775806, i2=-100000} {i1-i2} 9.22337203685488e+18
|
||||
test_expr expr-1.223\
|
||||
{i1=9223372036854775807, i2=0} {i1-i2} 9223372036854775807
|
||||
test_expr expr-1.224\
|
||||
{i1=9223372036854775807, i2=-1} {i1-i2} 9.22337203685478e+18
|
||||
test_expr expr-1.225\
|
||||
{i2=-9223372036854775806, i1=1} {i1-i2} 9223372036854775807
|
||||
test_expr expr-1.226\
|
||||
{i2=-9223372036854775806, i1=2} {i1-i2} 9.22337203685478e+18
|
||||
test_expr expr-1.227\
|
||||
{i2=-9223372036854775806, i1=100000} {i1-i2} 9.22337203685488e+18
|
||||
test_expr expr-1.228\
|
||||
{i2=-9223372036854775807, i1=0} {i1-i2} 9223372036854775807
|
||||
test_expr expr-1.229\
|
||||
{i2=-9223372036854775807, i1=1} {i1-i2} 9.22337203685478e+18
|
||||
test_expr expr-1.230\
|
||||
{i1=-9223372036854775807, i2=1} {i1-i2} -9223372036854775808
|
||||
test_expr expr-1.231\
|
||||
{i1=-9223372036854775807, i2=2} {i1-i2} -9.22337203685478e+18
|
||||
test_expr expr-1.232\
|
||||
{i1=-9223372036854775807, i2=100000} {i1-i2} -9.22337203685488e+18
|
||||
test_expr expr-1.233\
|
||||
{i1=-9223372036854775808, i2=0} {i1-i2} -9223372036854775808
|
||||
test_expr expr-1.234\
|
||||
{i1=-9223372036854775808, i2=1} {i1-i2} -9.22337203685478e+18
|
||||
test_expr expr-1.235\
|
||||
{i2=9223372036854775807, i1=-1} {i1-i2} -9223372036854775808
|
||||
test_expr expr-1.236\
|
||||
{i2=9223372036854775807, i1=-2} {i1-i2} -9.22337203685478e+18
|
||||
test_expr expr-1.237\
|
||||
{i2=9223372036854775807, i1=-100000} {i1-i2} -9.22337203685488e+18
|
||||
test_expr expr-1.238\
|
||||
{i2=9223372036854775807, i1=0} {i1-i2} -9223372036854775807
|
||||
test_expr expr-1.239\
|
||||
{i2=9223372036854775807, i1=-1} {i1-i2} -9223372036854775808
|
||||
|
||||
test_expr expr-1.250\
|
||||
{i1=4294967296, i2=2147483648} {i1*i2} 9.22337203685478e+18
|
||||
test_expr expr-1.251\
|
||||
{i1=4294967296, i2=2147483647} {i1*i2} 9223372032559808512
|
||||
test_expr expr-1.252\
|
||||
{i1=-4294967296, i2=2147483648} {i1*i2} -9223372036854775808
|
||||
test_expr expr-1.253\
|
||||
{i1=-4294967296, i2=2147483647} {i1*i2} -9223372032559808512
|
||||
test_expr expr-1.254\
|
||||
{i1=4294967296, i2=-2147483648} {i1*i2} -9223372036854775808
|
||||
test_expr expr-1.255\
|
||||
{i1=4294967296, i2=-2147483647} {i1*i2} -9223372032559808512
|
||||
test_expr expr-1.256\
|
||||
{i1=-4294967296, i2=-2147483648} {i1*i2} 9.22337203685478e+18
|
||||
test_expr expr-1.257\
|
||||
{i1=-4294967296, i2=-2147483647} {i1*i2} 9223372032559808512
|
||||
|
||||
}}
|
||||
|
||||
ifcapable floatingpoint {
|
||||
test_expr expr-2.1 {r1=1.23, r2=2.34} {r1+r2} 3.57
|
||||
test_expr expr-2.2 {r1=1.23, r2=2.34} {r1-r2} -1.11
|
||||
|
Reference in New Issue
Block a user