• unknown's avatar
    Fixes a number of problems with time/datetime <-> string conversion functions: · f29045b4
    unknown authored
    - bug #11655 "Wrong time is returning from nested selects - maximum time exists
    - input and output TIME values were not validated properly in several conversion functions
    - bug #20927 "sec_to_time treats big unsigned as signed"
    - integer overflows were not checked in several functions. As a result, input values like 2^32 or 3600*2^32 were treated as 0
    - BIGINT UNSIGNED values were treated as SIGNED in several functions
    - in cases where both input string truncation and out-of-range TIME value occur, only 'truncated incorrect time value' warning was produced
    
    
    include/my_time.h:
      Added defines for the TIME limits
      Added defines for the warning flags set by str_to_time() and check_time_range()
      Added check_time_range() declaration
    mysql-test/r/func_sapdb.result:
      Fixed testcases which relied on incorrect TIMEDIFF() behaviour
    mysql-test/r/func_time.result:
      Fixed testcase which relied on incorrect behaviour
      Added testcases for out-of-range values in SEC_TO_TIME(), TIME_TO_SEC(), ADDTIME(), SUBTIME() and EXTRACT()
    mysql-test/t/func_time.test:
      Added testcases for out-of-range values in SEC_TO_TIME(), TIME_TO_SEC(), ADDTIME(), SUBTIME() and EXTRACT()
    sql-common/my_time.c:
      Added check_time_range() to be used from str_to_time() and item_timefunc.cc
      Added new out-of-range flag to str_to_time() warnings
      Use '%u' instead of '%d' in my_*_to_str() because the arguments are unsigned
    sql/field.cc:
      Replaced out-of-range checks with checks for flags returned by str_to_time()
    sql/item_timefunc.cc:
      Added wrappers over make_datetime() and make_time() which perform out-of-range checks on input values
      Moved common code in Item_func_sec_to_time::val_str() and Item_func_sec_to_time::val_int() into a separate function sec_to_time()
      Replaced calls to make_datetime() with make_datetime_with_warn() in Item_func_add_time and Item_func_timediff
      Checks for 'unsigned int' overflows in Item_func_maketime
      Use make_time_with_warn() instead of make_time() in Item_func_maketime
      Fixed incorrect sizeof() in Item_func_str_to_date::get_time()
    sql/time.cc:
      Check for return value of str_to_time() along with warning flags
    f29045b4
my_time.h 2.8 KB