From: Jon Olav Hauglid Date: November 1 2012 1:56pm Subject: bzr push into mysql-5.6 branch (jon.hauglid:4525 to 4526) Bug#14838882 List-Archive: http://lists.mysql.com/commits/145185 X-Bug: 14838882 Message-Id: <20121101135635.30208.31876.4526@atum08.no.oracle.com> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit 4526 Jon Olav Hauglid 2012-11-01 Bug#14838882: INIT_IO_CACHE() HAS SUSPICIOUS MEMSET() The problem was that init_io_cache() contained a memset() that with SAFE_MUTEX was used to clear a mutex - IO_CACHE::append_buffer_lock. However the size of memory cleared was the size of the IO_CACHE pointer rather than the size of the IO_CACHE::append_buffer_lock mutex. This patch fixes the problem by clearing the appropriate number of bytes. modified: mysys/mf_iocache.c 4525 Jon Olav Hauglid 2012-11-01 Bug#14756206: ALTER TABLE: MYSQL_CREATE_FRM DOESN'T CLEAN UP PROPERLY, MEMORY LEAKED This memory leak happend if ALTER TABLE ... SET DEFAULT was used to set a default value for a TINY|MEDIUM|LONG BLOB|TEXT column. According to the manual, "BLOB and TEXT columns cannot be assigned a default value." This was true for CREATE TABLE and ALTER TABLE ADD/MODIFY COLUMN. However, for ALTER TABLE ... SET DEFAULT it was only enforced for plain BLOB|TEXT columns and not for their tiny/medium/long variations. When creating the record buffer for the default values of blob columns (represented internally by Field_blob), Field_blob::free() and ~Field_blob() were never called and memory allocated for Field_blob::value was therefore never released. This patch fixes the problem by reporting ER_BLOB_CANT_HAVE_DEFAULT error for TINY|MEDIUM|LONG BLOB|TEXT columns, similarly to what is already done for BLOB|TEXT columns and similar to what is already done for CREATE TABLE and ALTER TABLE ADD/MODIFY COLUMN. Note that this also disallows ALTER TABLE ... SET DEFAULT NULL for geometry column types (Field_geom). Such columns are not supposed to support SET DEFAULT and everything but SET DEFAULT NULL was already disallowed. modified: internal/mysql-test/suite/i_main/r/alter_table.result internal/mysql-test/suite/i_main/r/gis.result internal/mysql-test/suite/i_main/t/alter_table.test internal/mysql-test/suite/i_main/t/gis.test sql/sql_table.cc sql/unireg.cc === modified file 'mysys/mf_iocache.c' --- a/mysys/mf_iocache.c 2012-07-25 09:33:25 +0000 +++ b/mysys/mf_iocache.c 2012-11-01 13:36:39 +0000 @@ -259,7 +259,7 @@ int init_io_cache(IO_CACHE *info, File f else { /* Clear mutex so that safe_mutex will notice that it's not initialized */ - memset(&info->append_buffer_lock, 0, sizeof(info)); + memset(&info->append_buffer_lock, 0, sizeof(info->append_buffer_lock)); } #endif No bundle (reason: useless for push emails).