From: Guilhem Bichot Date: April 7 2011 1:11pm Subject: [Resend] bzr commit into mysql-5.1 branch (guilhem.bichot:3645) Bug#11765141 List-Archive: http://lists.mysql.com/commits/134934 X-Bug: 11765141 Message-Id: <201104071311.p37DBTo1010718@acsmt356.oracle.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============1337148451948971637==" --===============1337148451948971637== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline [This commit e-mail is a repeat.] #At file:///home/mysql_src/bzrrepos_new/mysql-5.1/ based on revid:magne.mahre@stripped 3645 Guilhem Bichot 2011-04-07 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. modified: mysql-test/r/loaddata.result mysql-test/t/loaddata.test sql/sql_load.cc === modified file 'mysql-test/r/loaddata.result' --- a/mysql-test/r/loaddata.result 2010-07-14 11:54:51 +0000 +++ b/mysql-test/r/loaddata.result 2011-04-07 13:09:19 +0000 @@ -532,4 +532,13 @@ a 0 1 DROP TABLE t1; +# +# Bug#11765141 - 58072: LOAD DATA INFILE: LEAKS IO CACHE MEMORY +# WHEN ERROR OCCURS +# +SELECT '1\n' INTO DUMPFILE 'MYSQLTEST_VARDIR/tmp/bug11735141.txt'; +create table t1(a point); +LOAD DATA INFILE 'MYSQLTEST_VARDIR/tmp/bug11735141.txt' INTO TABLE t1; +ERROR 22003: Cannot get geometry object from data you send to the GEOMETRY field +drop table t1; End of 5.1 tests === modified file 'mysql-test/t/loaddata.test' --- a/mysql-test/t/loaddata.test 2010-07-14 11:54:51 +0000 +++ b/mysql-test/t/loaddata.test 2011-04-07 13:09:19 +0000 @@ -612,4 +612,19 @@ let $MYSQLD_DATADIR= `select @@datadir`; remove_file $MYSQLD_DATADIR/test/tmpp2.txt; +--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 === modified file 'sql/sql_load.cc' --- a/sql/sql_load.cc 2010-12-17 13:05:50 +0000 +++ b/sql/sql_load.cc 2011-04-07 13:09:19 +0000 @@ -1075,9 +1075,10 @@ READ_INFO::READ_INFO(File file_par, uint String &field_term, String &line_start, String &line_term, String &enclosed_par, int escape, bool get_it_from_net, bool is_fifo) - :file(file_par),escape_char(escape) + :file(file_par), buff_length(tot_length), escape_char(escape), + found_end_of_line(false), eof(false), need_end_io_cache(false), + error(false), line_cuted(false), found_null(false), read_charset(cs) { - read_charset= cs; field_term_ptr=(char*) field_term.ptr(); field_term_length= field_term.length(); line_term_ptr=(char*) line_term.ptr(); @@ -1104,8 +1105,6 @@ READ_INFO::READ_INFO(File file_par, uint (uchar) enclosed_par[0] : INT_MAX; field_term_char= field_term_length ? (uchar) field_term_ptr[0] : INT_MAX; line_term_char= line_term_length ? (uchar) line_term_ptr[0] : INT_MAX; - error=eof=found_end_of_line=found_null=line_cuted=0; - buff_length=tot_length; /* Set of a stack for unget if long terminators */ @@ -1151,7 +1150,7 @@ READ_INFO::READ_INFO(File file_par, uint READ_INFO::~READ_INFO() { - if (!error && need_end_io_cache) + if (need_end_io_cache) ::end_io_cache(&cache); my_free(buffer, MYF(MY_ALLOW_ZERO_PTR)); --===============1337148451948971637== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/guilhem.bichot@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: guilhem.bichot@stripped\ # gbh9f4k0ron3y08k # target_branch: file:///home/mysql_src/bzrrepos_new/mysql-5.1/ # testament_sha1: 8f8b096d4385d7aa48991404fa2ccc23c7d03c0f # timestamp: 2011-04-07 15:11:22 +0200 # base_revision_id: magne.mahre@stripped\ # 9xe5fqklvg12495n # # Begin bundle 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 2qIaKeAq7jim1/+LuSKcKEg/mtJWgA== --===============1337148451948971637==--