Bug#12403504 AFTER FIX FOR #11889186 : ASSERTION FAILED: DELSUM+(INT) Y/4-TEMP > 0
There are two problems: 1. There is a missing check for 'year' parameter(year can not be greater than 9999) in makedate function. fix: added check that year can not be greater than 9999. 2. There is a missing check for zero date in from_days() function. fix: added zero date check into Item_func_from_days::get_date() function.
This commit is contained in:
parent
4731736320
commit
a7cd008e12
@ -1417,4 +1417,13 @@ NULL
|
|||||||
SELECT DATE_FORMAT('0000-00-11', '%w');
|
SELECT DATE_FORMAT('0000-00-11', '%w');
|
||||||
DATE_FORMAT('0000-00-11', '%w')
|
DATE_FORMAT('0000-00-11', '%w')
|
||||||
NULL
|
NULL
|
||||||
|
#
|
||||||
|
# Bug#12403504 AFTER FIX FOR #11889186 : ASSERTION FAILED: DELSUM+(INT) Y/4-TEMP > 0
|
||||||
|
#
|
||||||
|
SELECT MAKEDATE(11111111,1);
|
||||||
|
MAKEDATE(11111111,1)
|
||||||
|
NULL
|
||||||
|
SELECT WEEK(DATE_ADD(FROM_DAYS(1),INTERVAL 1 MONTH), 1);
|
||||||
|
WEEK(DATE_ADD(FROM_DAYS(1),INTERVAL 1 MONTH), 1)
|
||||||
|
NULL
|
||||||
End of 5.1 tests
|
End of 5.1 tests
|
||||||
|
@ -921,4 +921,11 @@ SELECT DATE_FORMAT('0000-00-11', '%W');
|
|||||||
SELECT DATE_FORMAT('0000-00-11', '%a');
|
SELECT DATE_FORMAT('0000-00-11', '%a');
|
||||||
SELECT DATE_FORMAT('0000-00-11', '%w');
|
SELECT DATE_FORMAT('0000-00-11', '%w');
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Bug#12403504 AFTER FIX FOR #11889186 : ASSERTION FAILED: DELSUM+(INT) Y/4-TEMP > 0
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
SELECT MAKEDATE(11111111,1);
|
||||||
|
SELECT WEEK(DATE_ADD(FROM_DAYS(1),INTERVAL 1 MONTH), 1);
|
||||||
|
|
||||||
--echo End of 5.1 tests
|
--echo End of 5.1 tests
|
||||||
|
@ -1519,6 +1519,11 @@ bool Item_func_from_days::get_date(MYSQL_TIME *ltime, uint fuzzy_date)
|
|||||||
return 1;
|
return 1;
|
||||||
bzero(ltime, sizeof(MYSQL_TIME));
|
bzero(ltime, sizeof(MYSQL_TIME));
|
||||||
get_date_from_daynr((long) value, <ime->year, <ime->month, <ime->day);
|
get_date_from_daynr((long) value, <ime->year, <ime->month, <ime->day);
|
||||||
|
|
||||||
|
if ((null_value= (fuzzy_date & TIME_NO_ZERO_DATE) &&
|
||||||
|
(ltime->year == 0 || ltime->month == 0 || ltime->day == 0)))
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
ltime->time_type= MYSQL_TIMESTAMP_DATE;
|
ltime->time_type= MYSQL_TIMESTAMP_DATE;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -2697,7 +2702,7 @@ String *Item_func_makedate::val_str(String *str)
|
|||||||
long days;
|
long days;
|
||||||
|
|
||||||
if (args[0]->null_value || args[1]->null_value ||
|
if (args[0]->null_value || args[1]->null_value ||
|
||||||
year < 0 || daynr <= 0)
|
year < 0 || year > 9999 || daynr <= 0)
|
||||||
goto err;
|
goto err;
|
||||||
|
|
||||||
if (year < 100)
|
if (year < 100)
|
||||||
@ -2740,7 +2745,7 @@ longlong Item_func_makedate::val_int()
|
|||||||
long days;
|
long days;
|
||||||
|
|
||||||
if (args[0]->null_value || args[1]->null_value ||
|
if (args[0]->null_value || args[1]->null_value ||
|
||||||
year < 0 || daynr <= 0)
|
year < 0 || year > 9999 || daynr <= 0)
|
||||||
goto err;
|
goto err;
|
||||||
|
|
||||||
if (year < 100)
|
if (year < 100)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user