Details
-
Bug
-
Status: Closed (View Workflow)
-
Major
-
Resolution: Fixed
-
10.2.2, 10.2.3, 10.2.4, 10.2.5, 10.3.0, 10.2.6
Description
MySQL 5.7 introduced a change that broke compatibility with old data files, by reading the SYS_TABLES.MIX_LEN column also for ROW_FORMAT=REDUNDANT tables, even though this column was written as uninitialized garbage in MySQL 4.1 and earlier versions.
Because MariaDB 10.2 does not support the TABLESPACE attribute for InnoDB tables like MySQL 5.7 does, we do not need this change and can essentially revert it.
Attachments
Issue Links
- relates to
-
MDEV-15507 Assertion `!((flags & ((~(~0U << 1)) << 0)) >> 0) || flags2 & 16U' failed in dict_check_sys_tables on upgrade from 5.5
-
- Closed
-
It turns out that the logic behind the MySQL 5.7 change is sound (the garbage SYS_TABLES.MIX_LEN was written before MySQL 4.1, and before MySQL 4.1, SYS_TABLES.SPACE was always written as 0), but the error handling is incorrect. The test innodb.row_format_redundant is not really testing the corruption; it is using fault injection by DBUG_EXECUTE_IF. This would lead to a crash when dict_sys_tables_rec_read() would return an error by setting *flags2 = ULINT_UNDEFINED. The callers are only checking for flags, not flags2.