diff options
author | Sergei Golubchik <serg@mariadb.org> | 2017-03-24 11:11:11 +0100 |
---|---|---|
committer | Sergei Golubchik <serg@mariadb.org> | 2017-03-29 00:40:22 +0200 |
commit | 92aafebd2a02be4c40ad4beb5b28ca6889c99cb9 (patch) | |
tree | ac79f6f33948fa3c3260efa45be26fb3e804d58d /mysql-test/r/win_bit.result | |
parent | f63007a37192ee541d791fb40ea8b0adad1464f3 (diff) | |
download | mariadb-git-92aafebd2a02be4c40ad4beb5b28ca6889c99cb9.tar.gz |
MDEV-11605 Assertion `(longlong) thd->status_var.local_memory_used >= 0 || !debug_assert_on_not_freed_memory' failed in my_malloc_size_cb_func
MyISAM in compute_vcols() - which is used only in mi_check code -
was computing indexed vcols into an internally allocated buffer
(not record[0]) and the buffer was calculated to be long enough to fit
every keyseg (a keyseg knows where its value in a record buffer is
and the length of the value).
This logic didn' work for prefix keys, because the keyseg length is the
length of a prefix, but the record buffer needs to fit the complete
value of a vcol. In this bug MyISAM was writing a 2K varchar
into a buffer too short.
Also it didn't work for repair-with-keycache, because that code
recalculats all vcols, not only indexed ones.
So, the buffer size (MYISAM_SHARE::vreclength) should include all
vcols' full lengths. But it was calculated in mi_open and low-level
MyISAM code has no knowledge of vcols.
As a fix we now recalculate MYISAM_SHARE::vreclength in
ha_myisam::setup_vcols_for_repair() which is always called
before compute_vcols().
Diffstat (limited to 'mysql-test/r/win_bit.result')
0 files changed, 0 insertions, 0 deletions