• Alexey Kopytov's avatar
    Bug #45796: invalid memory reads and writes when altering merge · 71197947
    Alexey Kopytov authored
                and base tables 
    
    myrg_attach_children() could reuse a buffer that was allocated 
    previously based on a definition of a child table. The problem 
    was that the child's definition might have been changed, so 
    reusing the buffer could lead to crashes or valgrind errors 
    under some circumstances. 
     
    Fixed by changing myrg_attach_children() so that the 
    rec_per_key_part buffer is reused only when the child table
    have not changed, and reallocated otherwise (the old buffer is 
    deallocated if necessary).
    
    
    include/myisammrg.h:
      Added a pointer to need_compat_check as an argument to
      myrg_attach_children().
    mysql-test/r/merge.result:
      Added a test case for bug #45796.
    mysql-test/t/merge.test:
      Added a test case for bug #45796.
    storage/myisammrg/ha_myisammrg.cc:
      Pass a pointer to need_compat_check to myrg_attach_children().
    storage/myisammrg/myrg_open.c:
      Changed myrg_attach_children() so that the 
      rec_per_key_part buffer is reused only when the child table
      have not changed, and reallocated otherwise (the old buffer 
      is deallocated if necessary).
    71197947
merge.test 47.6 KB