diff options
author | Alexander Barkov <bar@mariadb.org> | 2014-03-23 14:22:44 +0400 |
---|---|---|
committer | Alexander Barkov <bar@mariadb.org> | 2014-03-23 14:22:44 +0400 |
commit | e0f75b1bffa6ff5bacf7c72728fd356658fd9276 (patch) | |
tree | 59020f1b6c4e772853c388bbfbf13c20518ba0e8 /sql/sql_time.cc | |
parent | 887a210ffc5c38cf9623ad308b68094510f1bfbb (diff) | |
download | mariadb-git-e0f75b1bffa6ff5bacf7c72728fd356658fd9276.tar.gz |
MDEV-5870 Assertion `ltime->neg == 0' fails with COALESCE, ADDDATE, MAKEDATE
A huge number in the "day" part of an interval made the code to return
a negative date erroneously. Adding a test to return an error on a too
large "day" value.
Diffstat (limited to 'sql/sql_time.cc')
-rw-r--r-- | sql/sql_time.cc | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/sql/sql_time.cc b/sql/sql_time.cc index 2c4998fdf5e..9b68aba5b30 100644 --- a/sql/sql_time.cc +++ b/sql/sql_time.cc @@ -921,6 +921,9 @@ bool date_add_interval(MYSQL_TIME *ltime, interval_type int_type, my_bool neg= 0; enum enum_mysql_timestamp_type time_type= ltime->time_type; + if ((ulong) interval.day > MAX_DAY_NUMBER) + goto invalid_date; + if (time_type != MYSQL_TIMESTAMP_TIME) ltime->day+= calc_daynr(ltime->year, ltime->month, 1) - 1; |