summaryrefslogtreecommitdiff
path: root/mysql-test/t
diff options
context:
space:
mode:
authorGuilhem Bichot <guilhem.bichot@oracle.com>2011-04-07 15:09:19 +0200
committerGuilhem Bichot <guilhem.bichot@oracle.com>2011-04-07 15:09:19 +0200
commitdc65d9217c36a0edc8fab0a4a09fbeda7a5c278d (patch)
tree1361390096fdbc9f653b47618e94a1872121fa4d /mysql-test/t
parentc68a034e8382c03118f8c6708dd029a89aae30a7 (diff)
downloadmariadb-git-dc65d9217c36a0edc8fab0a4a09fbeda7a5c278d.tar.gz
Fix for Bug#11765141 - "58072: LOAD DATA INFILE: LEAKS IO CACHE MEMORY WHEN ERROR OCCURS"
mysql-test/t/loaddata.test: test for bug; without fix, running the test with --valgrind would show the leak and make the test fail. sql/sql_load.cc: * In READ_INFO class, 'need_end_io_cache' is true as long as init_io_cache() was called, so if it's true, we need to call end_io_cache(), to free memory allocated by init_io_cache(). No matter the value of 'error'. In the bug's scenario, 'error' was set to true in read_sep_field() because '1' (read from file) isn't suitable to load into a geometric column. Because of 'error', end_io_cache() was not called. Note: end_io_cache() calls my_b_flush_io_cache(), which will do nothing wrong given that the file is opened for reads only; see the init_io_cache() call which uses only those read-only types: (get_it_from_net) ? READ_NET : (is_fifo ? READ_FIFO : READ_CACHE). IF the cache were rather used to write to the file, my_b_flush_io_cache() may write to it, and it may be questionable to write to the file if 'error' is true. But here there's no problem. * Now that 'need_end_io_cache' is checked even if 'error' is true, it needs to be initialized in all cases. * Bonus: move some variables to the initialization list.
Diffstat (limited to 'mysql-test/t')
-rw-r--r--mysql-test/t/loaddata.test15
1 files changed, 15 insertions, 0 deletions
diff --git a/mysql-test/t/loaddata.test b/mysql-test/t/loaddata.test
index e0764b67ec0..3d0fdea05ed 100644
--- a/mysql-test/t/loaddata.test
+++ b/mysql-test/t/loaddata.test
@@ -625,4 +625,19 @@ DROP TABLE t1;
let $MYSQLD_DATADIR= `select @@datadir`;
remove_file $MYSQLD_DATADIR/test/t1.dat;
+--echo #
+--echo # Bug#11765141 - 58072: LOAD DATA INFILE: LEAKS IO CACHE MEMORY
+--echo # WHEN ERROR OCCURS
+--echo #
+
+--let $file=$MYSQLTEST_VARDIR/tmp/bug11735141.txt
+--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
+--eval SELECT '1\n' INTO DUMPFILE '$file'
+
+create table t1(a point);
+--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
+--error ER_CANT_CREATE_GEOMETRY_OBJECT
+--eval LOAD DATA INFILE '$file' INTO TABLE t1
+drop table t1;
+
--echo End of 5.1 tests