diff options
author | Sergei Golubchik <serg@mariadb.org> | 2022-01-02 12:26:38 +0100 |
---|---|---|
committer | Sergei Golubchik <serg@mariadb.org> | 2022-01-26 18:43:06 +0100 |
commit | aea076dc214ebf7d8c7928b36ce11198ebf861fd (patch) | |
tree | 9870d3cdce5d8e66ac842c670ffdaa4896ef789a | |
parent | ddbb3d14471cf733f633686ee4b163b2a6e1ebe7 (diff) | |
download | mariadb-git-aea076dc214ebf7d8c7928b36ce11198ebf861fd.tar.gz |
MDEV-27393 Timezone tables cannot have descending indexes
replace the assert with an if().
asserts should not be used on the input (even without DESC indexes
the table could've been corrupted)
-rw-r--r-- | mysql-test/main/timezone.result | 13 | ||||
-rw-r--r-- | mysql-test/main/timezone.test | 15 | ||||
-rw-r--r-- | sql/tztime.cc | 6 |
3 files changed, 33 insertions, 1 deletions
diff --git a/mysql-test/main/timezone.result b/mysql-test/main/timezone.result index b679a8cdcbd..2ba1e3fb1d5 100644 --- a/mysql-test/main/timezone.result +++ b/mysql-test/main/timezone.result @@ -62,3 +62,16 @@ NULL NULL NULL # # End of 4.1 tests # +# +# MDEV-27393 Timezone tables cannot have descending indexes +# +call mtr.add_suppression('mysql.time_zone_transition_type table is incorrectly defined or corrupted'); +alter table mysql.time_zone_transition_type drop primary key; +alter table mysql.time_zone_transition_type add primary key (time_zone_id,transition_type_id desc); +SET @@time_zone='Japan'; +ERROR HY000: Unknown or incorrect time zone: 'Japan' +alter table mysql.time_zone_transition_type drop primary key; +alter table mysql.time_zone_transition_type add primary key (time_zone_id,transition_type_id); +# +# End of 10.8 tests +# diff --git a/mysql-test/main/timezone.test b/mysql-test/main/timezone.test index 57eefa92b27..89c3ab5cfc1 100644 --- a/mysql-test/main/timezone.test +++ b/mysql-test/main/timezone.test @@ -59,3 +59,18 @@ select unix_timestamp('1969-12-31 23:59:59'), unix_timestamp('1970-01-01 00:00:0 --echo # --echo # End of 4.1 tests --echo # + +--echo # +--echo # MDEV-27393 Timezone tables cannot have descending indexes +--echo # +call mtr.add_suppression('mysql.time_zone_transition_type table is incorrectly defined or corrupted'); +alter table mysql.time_zone_transition_type drop primary key; +alter table mysql.time_zone_transition_type add primary key (time_zone_id,transition_type_id desc); +--error ER_UNKNOWN_TIME_ZONE +SET @@time_zone='Japan'; +alter table mysql.time_zone_transition_type drop primary key; +alter table mysql.time_zone_transition_type add primary key (time_zone_id,transition_type_id); + +--echo # +--echo # End of 10.8 tests +--echo # diff --git a/sql/tztime.cc b/sql/tztime.cc index 1f393e24ec2..f01fc9e5485 100644 --- a/sql/tztime.cc +++ b/sql/tztime.cc @@ -2004,7 +2004,11 @@ tz_load_from_open_tables(const String *tz_name, TABLE_LIST *tz_tables) #endif /* ttid is increasing because we are reading using index */ - DBUG_ASSERT(ttid >= tmp_tz_info.typecnt); + if (ttid < tmp_tz_info.typecnt) + { + sql_print_error("mysql.time_zone_transition_type table is incorrectly defined or corrupted"); + goto end; + } tmp_tz_info.typecnt= ttid + 1; |