mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
MDEV-21977 main.func_math fails due to undefined behaviour
The problem happened in these line: uval0= (ulonglong) (val0_negative ? -val0 : val0); uval1= (ulonglong) (val1_negative ? -val1 : val1); return check_integer_overflow(val0_negative ? -(longlong) res : res, !val0_negative); when unary minus was performed on -9223372036854775808. This behavior is undefined in C/C++.
This commit is contained in:
@ -946,5 +946,53 @@ STDDEV_SAMP(a)
|
||||
NULL
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# MDEV-21977 main.func_math fails due to undefined behaviour
|
||||
#
|
||||
SELECT 9223372036854775808 DIV 1;
|
||||
9223372036854775808 DIV 1
|
||||
9223372036854775808
|
||||
SELECT 9223372036854775808 DIV -1;
|
||||
ERROR 22003: BIGINT UNSIGNED value is out of range in '(9223372036854775808 DIV -(1))'
|
||||
SELECT -9223372036854775808 DIV 1;
|
||||
ERROR 22003: BIGINT value is out of range in '(-(9223372036854775808) DIV 1)'
|
||||
SELECT -9223372036854775808 DIV -1;
|
||||
ERROR 22003: BIGINT value is out of range in '(-(9223372036854775808) DIV -(1))'
|
||||
SELECT 9223372036854775808 MOD 1;
|
||||
9223372036854775808 MOD 1
|
||||
0
|
||||
SELECT 9223372036854775808 MOD -1;
|
||||
9223372036854775808 MOD -1
|
||||
0
|
||||
SELECT -9223372036854775808 MOD 1;
|
||||
-9223372036854775808 MOD 1
|
||||
0
|
||||
SELECT -9223372036854775808 MOD -1;
|
||||
-9223372036854775808 MOD -1
|
||||
0
|
||||
SELECT 1 MOD 9223372036854775808;
|
||||
1 MOD 9223372036854775808
|
||||
1
|
||||
SELECT -1 MOD 9223372036854775808;
|
||||
-1 MOD 9223372036854775808
|
||||
-1
|
||||
SELECT 1 MOD -9223372036854775808;
|
||||
1 MOD -9223372036854775808
|
||||
1
|
||||
SELECT -1 MOD -9223372036854775808;
|
||||
-1 MOD -9223372036854775808
|
||||
-1
|
||||
SELECT 9223372036854775808 MOD 9223372036854775808;
|
||||
9223372036854775808 MOD 9223372036854775808
|
||||
0
|
||||
SELECT 9223372036854775808 MOD -9223372036854775808;
|
||||
9223372036854775808 MOD -9223372036854775808
|
||||
0
|
||||
SELECT -9223372036854775808 MOD 9223372036854775808;
|
||||
-9223372036854775808 MOD 9223372036854775808
|
||||
0
|
||||
SELECT -9223372036854775808 MOD -9223372036854775808;
|
||||
-9223372036854775808 MOD -9223372036854775808
|
||||
0
|
||||
#
|
||||
# End of 10.1 tests
|
||||
#
|
||||
|
Reference in New Issue
Block a user