1
0
mirror of https://github.com/MariaDB/server.git synced 2025-08-01 03:47:19 +03:00

MDEV-21695 Server crashes in TABLE::evaluate_update_default_function upon UPDATE on temporary table

copy_data_between_tables() sets to->s->default_fields to 0, as a part
of the code disabling ON UPDATE actions for all old fields
(so ON UPDATE is enable only for new fields during copying).
After the actual copying, copy_data_between_tables() did not restore
to->s->default_fields to the original value. As a result, the
TABLE_SHARE to->s was left in a wrong state after copy_data_between_tables()
and further open_table_from_share() using this TABLE_SHARE did not
populate TABLE::default_field, which further made
TABLE::evaluate_update_default_function() crash on access to NULL
pointer.

Fix:
Changing copy_data_between_tables() to restore to->s->default_fields
to its original value after the copying loop.
This commit is contained in:
Alexander Barkov
2020-06-17 11:19:50 +04:00
parent fb0d18e412
commit b46b7144d1
3 changed files with 39 additions and 0 deletions

View File

@ -584,3 +584,21 @@ ALTER TABLE t1 CHANGE no_such_col1 col1 BIGINT NULL;
ERROR 42S22: Unknown column 'no_such_col1' in 't1'
TRUNCATE TABLE t1;
DROP TEMPORARY TABLE t1;
#
# MDEV-21695 Server crashes in TABLE::evaluate_update_default_function upon UPDATE on temporary table
#
SET timestamp=UNIX_TIMESTAMP('2001-01-01 10:20:30');
CREATE TEMPORARY TABLE t1 (a DATETIME ON UPDATE CURRENT_TIMESTAMP);
ALTER TABLE t1 ADD b INT;
INSERT INTO t1 (b) VALUES (1),(2);
ALTER TABLE t1 CHANGE COLUMN x xx INT;
ERROR 42S22: Unknown column 'x' in 't1'
UPDATE t1 SET b = 3;
SELECT * FROM t1;
a b
2001-01-01 10:20:30 3
2001-01-01 10:20:30 3
DROP TEMPORARY TABLE t1;
#
# End of 10.2 tests
#