mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 03:52:35 +01:00
Fix for bug#49465: valgrind warnings and incorrect live checksum...
Problem: inserting a record we don't set unused null bits in the record buffer if no default field values used. That may lead to wrong live checksum calculation. Fix: set unused null bits in the record buffer in such cases. mysql-test/r/myisam.result: Fix for bug#49465: valgrind warnings and incorrect live checksum... - test result. mysql-test/t/myisam.test: Fix for bug#49465: valgrind warnings and incorrect live checksum... - test case. sql/sql_insert.cc: Fix for bug#49465: valgrind warnings and incorrect live checksum... - set unused null bits to 1 in the record buffer in case we don't call restore_record() before a fill_record() call (when no default values used).
This commit is contained in:
parent
b72f278958
commit
06be03f77c
3 changed files with 39 additions and 1 deletions
|
@ -1883,4 +1883,19 @@ CHECK TABLE t1;
|
|||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# Bug #49465: valgrind warnings and incorrect live checksum...
|
||||
#
|
||||
CREATE TABLE t1(
|
||||
a VARCHAR(1), b VARCHAR(1), c VARCHAR(1),
|
||||
f VARCHAR(1), g VARCHAR(1), h VARCHAR(1),
|
||||
i VARCHAR(1), j VARCHAR(1), k VARCHAR(1)) CHECKSUM=1;
|
||||
INSERT INTO t1 VALUES('', '', '', '', '', '', '', '', '');
|
||||
CHECKSUM TABLE t1 QUICK;
|
||||
Table Checksum
|
||||
test.t1 467455460
|
||||
CHECKSUM TABLE t1 EXTENDED;
|
||||
Table Checksum
|
||||
test.t1 467455460
|
||||
DROP TABLE t1;
|
||||
End of 5.0 tests
|
||||
|
|
|
@ -1225,4 +1225,18 @@ SELECT a FROM t1;
|
|||
CHECK TABLE t1;
|
||||
DROP TABLE t1;
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # Bug #49465: valgrind warnings and incorrect live checksum...
|
||||
--echo #
|
||||
CREATE TABLE t1(
|
||||
a VARCHAR(1), b VARCHAR(1), c VARCHAR(1),
|
||||
f VARCHAR(1), g VARCHAR(1), h VARCHAR(1),
|
||||
i VARCHAR(1), j VARCHAR(1), k VARCHAR(1)) CHECKSUM=1;
|
||||
INSERT INTO t1 VALUES('', '', '', '', '', '', '', '', '');
|
||||
CHECKSUM TABLE t1 QUICK;
|
||||
CHECKSUM TABLE t1 EXTENDED;
|
||||
DROP TABLE t1;
|
||||
|
||||
|
||||
--echo End of 5.0 tests
|
||||
|
|
|
@ -787,12 +787,21 @@ bool mysql_insert(THD *thd,TABLE_LIST *table_list,
|
|||
restore_record(table,s->default_values); // Get empty record
|
||||
else
|
||||
{
|
||||
TABLE_SHARE *share= table->s;
|
||||
|
||||
/*
|
||||
Fix delete marker. No need to restore rest of record since it will
|
||||
be overwritten by fill_record() anyway (and fill_record() does not
|
||||
use default values in this case).
|
||||
*/
|
||||
table->record[0][0]= table->s->default_values[0];
|
||||
table->record[0][0]= share->default_values[0];
|
||||
|
||||
/* Fix undefined null_bits. */
|
||||
if (share->null_bytes > 1 && share->last_null_bit_pos)
|
||||
{
|
||||
table->record[0][share->null_bytes - 1]=
|
||||
share->default_values[share->null_bytes - 1];
|
||||
}
|
||||
}
|
||||
if (fill_record_n_invoke_before_triggers(thd, table->field, *values, 0,
|
||||
table->triggers,
|
||||
|
|
Loading…
Reference in a new issue