summaryrefslogtreecommitdiff
path: root/sql/sql_time.cc
diff options
context:
space:
mode:
authorAlexander Barkov <bar@mariadb.org>2014-03-23 14:22:44 +0400
committerAlexander Barkov <bar@mariadb.org>2014-03-23 14:22:44 +0400
commite0f75b1bffa6ff5bacf7c72728fd356658fd9276 (patch)
tree59020f1b6c4e772853c388bbfbf13c20518ba0e8 /sql/sql_time.cc
parent887a210ffc5c38cf9623ad308b68094510f1bfbb (diff)
downloadmariadb-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.cc3
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;