• Dmitry Shulga's avatar
    MDEV-14959: Fixed possible memory leaks that could happen on running PS/SP depending on a trigger · 1d502a29
    Dmitry Shulga authored
    Moved call of the function check_and_update_table_version() just
    before the place where the function extend_table_list() is invoked
    in order to avoid allocation of memory on a PS/SP memory root
    marked as read only. It happens by the reason that the function
    extend_table_list() invokes sp_add_used_routine() to add a trigger
    created for the table in time frame between execution the statement
    EXECUTE `stmt_id` .
    
    For example, the following test case
    create table t1 (a int);
    
    prepare stmt from "insert into t1 (a) value (1)";
    execute stmt;
    
    create trigger t1_bi before insert on t1 for each row
      set @message= new.a;
    
    execute stmt; # (*)
    
    adds the trigger t1_bi to a list of used routines that involves
    allocation of a memory on PS memory root that has been already marked
    as read only on first run of the statement 'execute stmt'.
    In result, when the statement marked with (*) is executed it results in
    assert hit.
    
    To fix the issue call the function check_and_update_table_version()
    before invocation of extend_table_list() to force re-compilation of
    PS/SP that resets read-only flag of its memory root.
    1d502a29
sql_base.cc 307 KB