• Guilhem Bichot's avatar
    Fix for Bug#11765141 - "58072: LOAD DATA INFILE: LEAKS IO CACHE MEMORY WHEN ERROR OCCURS" · dc65d921
    Guilhem Bichot authored
    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.
    dc65d921
loaddata.test 20.3 KB