Details
-
Bug
-
Status: Closed (View Workflow)
-
Resolution: Won't Fix
-
None
-
None
-
None
Description
mysql> select version();
-----------------------------
| version() |
-----------------------------
| 5.1.39-maria-beta-debug-log |
-----------------------------
1 row in set (0.00 sec)
mysql> SELECT 4294967296 * 4294967296;
-------------------------
| 4294967296 * 4294967296 |
-------------------------
| 0 |
-------------------------
1 row in set (0.00 sec)
mysql> show warnings;
Empty set (0.00 sec)
mysql> SELECT 3037000500 * 3037000500;
-------------------------
| 3037000500 * 3037000500 |
-------------------------
| -9223372036709301616 |
-------------------------
1 row in set (0.00 sec)
mysql> show warnings;
Empty set (0.00 sec)
mysql> SELECT 4294967296 * 4294967297;
-------------------------
| 4294967296 * 4294967297 |
-------------------------
| 4294967296 |
-------------------------
1 row in set (0.00 sec)
mysql> show warnings;
Empty set (0.00 sec)
mysql> SELECT 4294967296 * 4294967298;
-------------------------
| 4294967296 * 4294967298 |
-------------------------
| 8589934592 |
-------------------------
1 row in set (0.00 sec)
mysql> show warnings;
Empty set (0.00 sec)
mysql> SELECT 4294967296.0 * 4294967298.0;
-----------------------------
| 4294967296.0 * 4294967298.0 |
-----------------------------
| 18446744082299486208.00 |
-----------------------------
1 row in set (0.08 sec)
mysql> show warnings;
Empty set (0.00 sec)
mysql> quit;
Bye
archivist@cnc:~/archivist-cnc/archivist-cnc/build/mysql-test$ uname -a
Linux cnc 2.6.24-16-rtai #1 Tue Sep 30 22:54:33 EEST 2008 i686 GNU/Linux
adding a .0 to the large number gets it to use float/double maths, the integer maths does not seem to check its range or overflow conditions correctly thus giving incorrect results.
- Bug#xxxxx: Reproducible MariaDB server integer math fault
# - this returns 0 incorrectly it appears to be the left side * 0
--exec $MYSQL test -e "SELECT 4294967296 * 4294967296\g" 2>&1
# - this gives an incorrect negative number
--exec $MYSQL test -e "SELECT 3037000500 * 3037000500\g" 2>&1
# - this returns 4294967296 the number on the left times 1
--exec $MYSQL test -e "SELECT 4294967296 * 4294967297\g" 2>&1
# - this returns 8589934592 the number on the left times 2
--exec $MYSQL test -e "SELECT 4294967296 * 4294967298\g" 2>&1
# - this seems to be correct it has cast to a float/double
--exec $MYSQL test -e "SELECT 4294967296.0 * 4294967298.0;\g" 2>&1