mirror of
https://github.com/MariaDB/server.git
synced 2026-05-10 09:04:29 +02:00
MDEV-25524 heap-use-after-free in fil_space_t::rename()
In commit 91599701d0 (MDEV-25312)
some recovery code for TRUNCATE TABLE was broken
causing a regression in a case where undo log for a RENAME TABLE
operation had been durably written but the tablespace had not been
renamed yet.
row_rename_table_for_mysql(): Add a DEBUG_SYNC point for the
test case, and simplify the logic and trim the error messages.
fil_space_t::rename(): Simplify the operation. Merge the necessary
part of fil_rename_tablespace_check(). If there is no change to
the file name, do nothing.
dict_table_t::rename_tablespace(): Refactored from
dict_table_rename_in_cache().
row_undo_ins_parse_undo_rec(): On rolling back TRX_UNDO_RENAME_TABLE,
invoke dict_table_t::rename_tablespace() even if the table name matches.
os_file_rename_func(): Temporarily relax an assertion that would
fail during the recovery in the test innodb.truncate_crash.
This commit is contained in:
parent
55e0ce1401
commit
54e2e70194
10 changed files with 164 additions and 253 deletions
|
|
@ -2045,6 +2045,12 @@ struct dict_table_t {
|
|||
void stats_mutex_lock() { lock_mutex_lock(); }
|
||||
void stats_mutex_unlock() { lock_mutex_unlock(); }
|
||||
|
||||
/** Rename the data file.
|
||||
@param new_name name of the table
|
||||
@param replace whether to replace the file with the new name
|
||||
(as part of rolling back TRUNCATE) */
|
||||
dberr_t rename_tablespace(const char *new_name, bool replace) const;
|
||||
|
||||
private:
|
||||
/** Initialize instant->field_map.
|
||||
@param[in] table table definition to copy from */
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue