1
0
mirror of https://github.com/MariaDB/server.git synced 2025-04-24 18:27:21 +03:00

70 Commits

Author SHA1 Message Date
Tor Didriksen
b9a929082b Bug#12711164 - 61676: RESULT OF DIV WITH DECIMAL AND INTEGER DOES NOT MAKE SENSE
Truncate result of decimal division before converting to integer.
2011-07-18 11:21:14 +02:00
Tor Didriksen
7fddcd06d2 Bug#12537160 ASSERTION FAILED: STOP0 <= &TO->BUF[TO->LEN] WITH LARGE NUMBER.
Turns out the DBUG_ASSERT added by fix for Bug#11792200 was overly pessimistic:
'stop0' is used in the main loop of do_div_mod, but we only dereference 'buf0'
for div operations, not for mod.
2011-07-18 09:47:39 +02:00
Sergey Glukhov
f52ff493e8 5.1 -> 5.5 merge 2011-05-26 14:09:25 +04:00
Sergey Glukhov
aa0c8235a4 Bug#12392636 ASSERTION FAILED: SCALE >= 0 && PRECISION > 0 && SCALE <= PRECISION
Assertion happens due to missing NULL value check in
Item_func_round::fix_length_and_dec() function.
The fix: added NULL value check for second parameter.
2011-05-26 14:06:39 +04:00
Sergey Glukhov
71bb332aa3 Bug#11765923 58937: MANY VALGRIND ERRORS AFTER GROUPING BY RESULT OF DECIMAL COLUMN FUNCTION
Bug#11764671  57533: UNINITIALISED VALUES IN COPY_AND_CONVERT (SQL_STRING.CC) WITH CERTAIN CHA
When ROUND evaluates decimal result it uses Item::decimal
value as fraction value for the result. In some cases
Item::decimal is greater than real result fraction value
and uninitialised memory of result(decimal) buffer can be
used in further calculations. Issue is introduced by
Bug33143 fix. The fix is to remove erroneous assignment.
2011-04-20 11:39:20 +04:00
Sergey Glukhov
ebca704c3b 5.1 -> 5.5 merge 2011-04-20 11:52:40 +04:00
Sergey Glukhov
514be8922b 5.1 -> 5.5 merge 2011-03-28 12:52:47 +04:00
Sergey Glukhov
86c1225699 Bug#11764994 57900: CREATE TABLE .. SELECT ASSERTS SCALE >= 0 && PRECISION > 0 && SCALE <= PR
Assert fails due to overflow which happens in
Item_func_int_val::fix_num_length_and_dec() as
geometry functions have max_length value equal to
max_field_size(4294967295U). The fix is to skip
max_length calculation for some boundary cases.
2011-03-28 12:35:50 +04:00
Tor Didriksen
4148b03910 Bug #11792200 - DIVIDING LARGE NUMBERS CAUSES STACK CORRUPTIONS
This was a buffer overrun in do_div_mod(), overwriting the internal buffer
of auto variable 'tmp' in Item_func_int_div::val_int.
Result on windows: 'this' is set to zero, and crash.
Ran fine on other platforms (no valgrind warnings),
but this is undefined behaviour on any platform of course.
2011-03-03 15:25:41 +01:00
Tor Didriksen
02d7b27641 Bug #59498 div function broken in mysql-trunk 2011-01-14 15:03:37 +01:00
Tor Didriksen
8dfab82ee0 Bug #59241 invalid memory read in do_div_mod with doubly assigned variables
Fix: copy my_decimal by value, to avoid dangling pointers.
2011-01-14 10:05:14 +01:00
Sergey Glukhov
26763a57a3 5.1-bugteam->5.5-bugteam merge 2010-12-24 14:21:44 +03:00
Sergey Glukhov
b69b46c775 Bug#57810 case/when/then : Assertion failed: length || !scale
ASSERT happens due to improper calculation of the max_length
in Item_func_div object, if dividend has max_length == 0 then
Item_func_div::max_length is set to 0 under some circumstances.
The fix:
If decimals == NOT_FIXED_DEC then set
Item_func_div::max_length to max possible
DOUBLE length value.
2010-12-24 14:05:04 +03:00
Georgi Kodinov
96d45ed2f6 merge 2010-11-26 16:32:51 +02:00
Tor Didriksen
0654c94ca2 Bug #58137 char(0) column cause: my_gcvt: Assertion `width > 0 && to != ((void *)0)' failed 2010-11-17 16:39:35 +01:00
Sergey Glukhov
5bf148fccd Bug#57477 SIGFPE when dividing a huge number a negative number
The problem is dividing by const value when
the result is out of supported range.
The fix:
-return LONGLONG_MIN if the result is out of supported range for DIV operator.
-return 0 if divisor is -1 for MOD operator.
2010-10-27 18:12:10 +04:00
Tor Didriksen
921fd52975 Bug#57209 valgrind + Assertion failed: dst > buf
Buffer overrun when trying to format DBL_MAX
2010-10-08 11:52:09 +02:00
Alexey Kopytov
aef97cadfa Bug #8433: Overflow must be an error
All numeric operators and functions on integer, floating point 
and DECIMAL values now throw an 'out of range' error rather 
than returning an incorrect value or NULL,  when the result is 
out of supported range for the corresponding data type. 
 
Some test cases in the test suite had to be updated 
accordingly either because the test case itself relied on a 
value returned in case of a numeric overflow, or because a 
numeric overflow was the root cause of the corresponding bugs. 
The latter tests are no longer relevant, since the expressions 
used to trigger the corresponding bugs are not valid anymore. 
However, such test cases have been adjusted and kept "for the 
record".
2010-03-18 13:38:29 +03:00
Alexey Kopytov
425157eee3 Backport of the patch for bug #8457 "Precision math: DIV
returns incorrect result with large decimal value" 
 
For the DIV operator, neither operands nor result were checked 
for integer overflows. 
 
This patch changes the DIV behavior for non-integer operands as 
follows: if either of the operands has a non-integer type, 
convert both operands to the DECIMAL type, then calculate the 
division using DECIMAL arithmetics. Convert the resulting 
DECIMAL value into BIGINT [UNSIGNED] if it fits into the 
corresponding range, or throw an 'out of range' error 
otherwise.
2009-10-13 12:31:42 +04:00
Sergey Glukhov
9800aa29e3 5.0-bugteam->5.1-bugteam merge 2009-06-02 12:00:37 +05:00
Sergey Glukhov
83ec6e0592 Bug#45152 crash with round() function on longtext column in a derived table
The crash happens due to wrong max_length value which is set on
Item_func_round::fix_length_and_dec() stage. The value is set to
args[0]->max_length which is too big in case of LONGTEXT(LONGBLOB) fields.
The fix is to set max_length using float_length() function.
2009-06-02 11:38:13 +05:00
Gleb Shchepa
9cc4cb0ea1 Bug #44768: SIGFPE crash when selecting rand from a view containing null
The RAND(N) function where the N is a field of "constant" table
(table of single row) failed with a SIGFPE.

Evaluation of RAND(N) rely on constant status of its argument.
Current server "seeded" random value for each constant argument
only once, in the Item_func_rand::fix_fields method.
Then the server skipped a call to seed_random() in the
Item_func_rand::val_real method for such constant arguments.

However, non-constant state of an argument may be changed
after the call to fix_fields, if an argument is a field of
"constant" table. Thus, pre-initialization of random value
in the fix_fields method is too early.


Initialization of random value by seed_random() has been
removed from Item_func_rand::fix_fields method.
The Item_func_rand::val_real method has been modified to
call seed_random() on the first evaluation of this method
if an argument is a function.
2009-05-18 09:21:25 +05:00
Alexey Kopytov
2247fb7cd1 Manual merge to 5.1. 2009-02-23 14:42:31 +02:00
Alexey Kopytov
cebaf077d2 Fix for bug #15936: "round" differs on Windows to Unix
Both of our own implementations of rint(3) were inconsistent with the
most common behavior of rint() on those platforms that have it: round
to nearest, break ties by rounding to nearest even.

Fixed by leaving just one implementation of rint() in our source tree,
and changing its behavior to match the most common native
implementations on other platforms.
2009-02-23 14:28:26 +02:00
kaa@kaamos.(none)
8d222210c7 Fix for bug #31236: Inconsistent division by zero behavior for
floating point numbers

Some math functions did not check if the result is a valid number
(i.e. neither of +-inf or nan).

Fixed by validating the result where necessary and returning NULL in
case of invalid result.
2008-02-20 00:33:43 +03:00
gkodinov/kgeorge@magare.gmz
61085ae612 merge 5.0-opt -> 5.1-opt 2007-10-01 12:56:25 +03:00
gkodinov/kgeorge@magare.gmz
93d44a183d removed undeterministic test result from the fux for bug 30587 2007-10-01 12:51:59 +03:00
gkodinov/kgeorge@magare.gmz
5ac2fd0b1b Merge macbook:mysql/work/B30587-5.0-opt
into  magare.gmz:/home/kgeorge/mysql/work/B30587-5.1-opt
2007-09-28 17:03:14 +03:00
gkodinov/kgeorge@macbook.gmz
aa2d545de2 Bug #30587: mysql crashes when trying to group by TIME div NUMBER
When calculating the result length of an integer DIV function 
the number of decimals was used without checking the result type
first. Thus an uninitialized number of decimals was used for some 
types. This caused an excessive amount of memory to be allocated 
for the field's buffer and crashed the server.

 
Fixed by using the number of decimals only for data types that 
can have decimals and thus have valid decimals number.
2007-09-28 16:46:05 +03:00
kaa@polly.local
a45b654ed7 Merge polly.local:/home/kaa/src/maint/bug24912/my50-bug24912
into  polly.local:/home/kaa/src/maint/bug24912/my51-bug24912
2007-04-28 20:04:03 +04:00
kaa@polly.local
050c6723e8 Fix for bug #24912 "problems with bigint in abs() ceiling() round() truncate() mod()" and a number of related problems:
- unsigned flag was not handled correctly for a number of mathematical funcions, which led to incorrect results
- passing large values as the number of decimals to ROUND() resulted in incorrect results and even server crashes in some cases
- reverted the fix and the testcase for bug #10083 as it violates the manual
- fixed some testcases which relied on broken ROUND() behavior
2007-04-28 20:01:01 +04:00
gkodinov/kgeorge@macbook.gmz
450e9b6b30 Bug #6172: RAND(a) should only accept constant values as arguments
RAND() must accept scalar expressions regardless of their kind.
 That includes both constant expressions and expressions that 
 depend on column values.
 When the expression is constant the random seed can be initialized
 at compile time.
 However when the expression is not constant the random seed must be
 initialized at each invocation (while it still can be allocated at
 compile time).
 Implemented the above rules by extending Item_func_rand::val_real()
 to initialize the random seed at the correct place.
2007-01-23 19:45:58 +02:00
malff/marcsql@weblab.(none)
62c242cc75 Bug#21114 (Foreign key creation fails to table with name format)
Due to the complexity of this change, everything is documented in WL#3565

This patch is the third iteration, it takes into account the comments
received to date.
2006-11-02 11:01:53 -07:00
gluh@eagle.intranet.mysql.r18.ru
33e7d20f37 Fix for bug#16678 FORMAT gives wrong result if client run with default-character-set=utf8
calculate Item_func_format::max_length using charset->mbmaxlen
2006-03-06 12:52:38 +04:00
gunnar@mysql.com.
001224c09d item_func.cc:
fix for bug#8461

  BUG 8461 - TRUNCATE returns incorrect result if 2nd argument is negative
  Reason: Both TRUNCATE/ROUND converts INTEGERS to DOUBLE and back to INTEGERS
  Changed the integer routine to work on integers only.
  This bug affects 4.1, 5.0 and 5.1
  Fixing in 4.1 will need to change the routine to handle different types individually.
  5.0 did had different routines for different types already just the INTEGER routine was bad.
2006-02-07 13:26:35 +01:00
hf@eagle.intranet.mysql.r18.ru
4f368f9f93 Merging 2006-01-21 18:50:06 +04:00
holyfoot@deer.(none)
6a8f762ecd bug #15429 (Test 'func_math' not prepared for 'classic' build) 2005-12-19 14:21:42 +04:00
jimw@mysql.com
009bcc7442 Merge mysql.com:/home/jimw/my/mysql-4.1-clean
into  mysql.com:/home/jimw/my/mysql-5.0-clean
2005-10-27 18:46:00 -07:00
jimw@mysql.com
31a79ee3d0 Fix Item_func_abs::fix_length_and_dec() to set maybe_null properly. (Bug #14009) 2005-10-17 17:00:42 -07:00
hf@deer.(none)
15fbd07a22 Fix for bug #13820 (No warning on log(NEGATIVE)) 2005-10-17 12:32:22 +05:00
bell@sanja.is.com.ua
352c7b9cbc Merge sanja.is.com.ua:/home/bell/mysql/bk/work-4.1
into  sanja.is.com.ua:/home/bell/mysql/bk/work-mrg-5.0
2005-09-06 20:51:15 +03:00
gluh@eagle.intranet.mysql.r18.ru
a5bd5e9af2 Bug #6172 RAND(a) should only accept constant values as arguments(2nd version)
Argument of RAND function can be constant value only
2005-09-06 16:19:59 +05:00
jimw@mysql.com
48d111c8c2 Merge mysql.com:/home/jimw/my/mysql-4.1-clean
into  mysql.com:/home/jimw/my/mysql-5.0-clean
2005-08-01 17:54:57 -07:00
jimw@mysql.com
c3e40306b7 Merge mysql.com:/home/jimw/my/mysql-4.1-11402
into  mysql.com:/home/jimw/my/mysql-4.1-clean
2005-08-01 17:11:49 -07:00
monty@mysql.com
15d48525af Merge mysql.com:/home/my/mysql-4.1
into  mysql.com:/home/my/mysql-5.0
2005-07-28 17:09:54 +03:00
monty@mysql.com
3c12d0ae54 Added end marker for tests to make future merges easier 2005-07-28 03:22:47 +03:00
jimw@mysql.com
1fa7b95d98 Fix multiplication of abs() by a negative value. (Bug #11402) 2005-06-22 20:00:21 -07:00
hf@deer.(none)
f1fb785b12 Fix for bug #10632 (CEILING returns wrong result) 2005-06-15 19:53:40 +05:00
holyfoot@hf-ibm.(none)
717d92f6a6 Fix for bug #10083 (round doesn't increase scale) 2005-06-09 15:27:26 +05:00
holyfoot@hf-ibm.(none)
ff9951f221 Fix for bug #8429 (FORMAT returns incorrect result) 2005-06-08 15:49:36 +05:00