summaryrefslogtreecommitdiff
path: root/mysql-test
diff options
context:
space:
mode:
authorunknown <thek@adventure.(none)>2007-07-25 09:43:49 +0200
committerunknown <thek@adventure.(none)>2007-07-25 09:43:49 +0200
commitcfdd203549bf8676d4aefb527bb43f8429a39c4d (patch)
tree4975540067a1ce21545ee546bf04332d0fbfcb96 /mysql-test
parent8bbaf6addd99a477a66c8322d44177dbdac4e4e8 (diff)
downloadmariadb-git-cfdd203549bf8676d4aefb527bb43f8429a39c4d.tar.gz
Bug#28641 CREATE EVENT with '2038.01.18 03:00:00' let server crash.
Creating an EVENT to be executed at a time close to the end of the allowed range (2038.01.19 03:14:07 UTC) would cause the server to crash. The expected behavior is to accept all calendar times within the interval and reject all other values without crashing. This patch replaces the function 'sec_to_epoch_TIME' with a Time_zone API call. This function was broken because it invoked the internal function 'sec_to_epoch' without respecting the restrictions on the function parameters (and this caused assertion failure). It also was used as a reverse function to Time_zone_utc::gmt_sec_to_TIME which it isn't. mysql-test/r/events_bugs.result: Added test case mysql-test/t/events_bugs.test: Added test case sql/event_data_objects.cc: Replaced function 'sec_since_epoch_TIME' since it was implemented as a wrapper around 'sec_since_epoch' without taking parameter restrictions into account. The function was used to load information about event execution time from mysql.events table. Further more, the function wasn't the inverse function of Time_zone_utc::gmt_sec_to_TIME() which was used by events code to store information about event execution time. sql/event_db_repository.cc: Replaced my_tz_UTC object with my_tz_OFFSET0 object because the first one doesn't supply us with a bijective MYSQL_TIME<->my_time_t translation. Instead the function sec_since_epoch_TIME was used as a reverse function to the method my_tz_UTC::gmt_sec_to_TIME. sql/event_queue.cc: Replaced my_tz_UTC object with my_tz_OFFSET0 object because the first one doesn't supply us with a bijective MYSQL_TIME<->my_time_t translation. Instead the function sec_since_epoch_TIME was used as a reverse function to the method my_tz_UTC::gmt_sec_to_TIME. sql/tztime.cc: * Remove function 'sec_since_epoch_TIME' since it was implemented as a wrapper around 'sec_since_epoch' without taking parameter restrictions into account. The function was used to load information about event execution time from mysql.events table. Further more, the function wasn't the inverse function of Time_zone_utc::gmt_sec_to_TIME() which was used by events code to store information about event execution time. * Added static Time_zone object for UTC+0 time zone. sql/tztime.h: Include extern pointer to static Time_zone object.
Diffstat (limited to 'mysql-test')
-rw-r--r--mysql-test/r/events_bugs.result7
-rw-r--r--mysql-test/t/events_bugs.test15
2 files changed, 22 insertions, 0 deletions
diff --git a/mysql-test/r/events_bugs.result b/mysql-test/r/events_bugs.result
index 557c8e0b477..1bfa0e84f72 100644
--- a/mysql-test/r/events_bugs.result
+++ b/mysql-test/r/events_bugs.result
@@ -611,3 +611,10 @@ id ev_nm ev_cnt
DROP TABLE event_log;
SET GLOBAL event_scheduler = OFF;
DROP DATABASE events_test;
+SET GLOBAL event_scheduler= ON;
+CREATE EVENT bug28641 ON SCHEDULE AT '2038.01.18 03:00:00'
+ DO BEGIN
+SELECT 1;
+END;|
+SET GLOBAL event_scheduler= OFF;
+DROP EVENT bug28641;
diff --git a/mysql-test/t/events_bugs.test b/mysql-test/t/events_bugs.test
index 4186b4701fa..36052fdb9af 100644
--- a/mysql-test/t/events_bugs.test
+++ b/mysql-test/t/events_bugs.test
@@ -722,3 +722,18 @@ let $wait_condition=
--source include/wait_condition.inc
DROP DATABASE events_test;
+
+
+#
+# Bug#28641 CREATE EVENT with '2038.01.18 03:00:00' let server crash.
+#
+SET GLOBAL event_scheduler= ON;
+DELIMITER |;
+CREATE EVENT bug28641 ON SCHEDULE AT '2038.01.18 03:00:00'
+ DO BEGIN
+ SELECT 1;
+ END;|
+
+DELIMITER ;|
+SET GLOBAL event_scheduler= OFF;
+DROP EVENT bug28641;