• Gleb Shchepa's avatar
    Bug #50096: CONCAT_WS inside procedure returning wrong data · 71fd38e4
    Gleb Shchepa authored
    Selecting of the CONCAT_WS(...<PS parameter>...) result into
    a user variable may return wrong data.
    
    Item_func_concat_ws::val_str contains a number of memory
    allocation-saving optimization tricks. After the fix
    for bug 46815 the control flow has been changed to a
    branch that is commented as "This is quite uncommon!":
    one of places where we are trying to concatenate
    strings inplace. However, that "uncommon" place
    didn't care about PS parameters, that have another
    trick in Item_sp_variable::val_str(): they use the
    intermediate Item_sp_variable::str_value field,
    where they may store a reference to an external
    argument's buffer.
    
    The Item_func_concat_ws::val_str function has been
    modified to take into account val_str functions
    (such as Item_sp_variable::val_str) that return a
    pointer to an internal Item member variable that
    may reference to a buffer provided.
    
    
    mysql-test/r/func_concat.result:
      Added test case for bug #50096.
    mysql-test/t/func_concat.test:
      Added test case for bug #50096.
    sql/item_strfunc.cc:
      Bug #50096: CONCAT_WS inside procedure returning wrong data
      
      The Item_func_concat_ws::val_str function has been
      modified to take into account val_str functions
      (such as Item_sp_variable::val_str) that return a
      pointer to an internal Item member variable that
      may reference to a buffer provided.
    71fd38e4
func_concat.test 3.32 KB