• unknown's avatar
    Bug#28641 CREATE EVENT with '2038.01.18 03:00:00' let server crash. · cfdd2035
    unknown authored
    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.
    cfdd2035
event_queue.cc 20 KB