• Alexander Barkov's avatar
    MDEV-11780 Crash with PREPARE + SP out parameter + literal · ae91690d
    Alexander Barkov authored
    Before "MDEV-10709 Expressions as parameters to Dynamic SQL" only
    user variables were syntactically allowed as EXECUTE parameters.
    User variables were OK as both IN and OUT parameters.
    When Item_param was bound to an actual parameter (a user variable),
    it automatically meant that the bound Item was settable.
    The DBUG_ASSERT() in Protocol_text::send_out_parameters() guarded that
    the actual parameter is really settable.
    
    After MDEV-10709, any kind of expressions are allowed as EXECUTE IN parameters.
    But the patch for MDEV-10709 forgot to check that only descendants of
    Settable_routine_parameter should be allowed as OUT parameters.
    So an attempt to pass a non-settable parameter as an OUT parameter
    made server crash on the above mentioned DBUG_ASSERT.
    
    This patch changes Item_param::get_settable_routine_parameter(),
    which previously always returned "this". Now, when Item_param is bound
    to some Item, it caches if the bound Item is settable.
    Item_param::get_settable_routine_parameter() now returns "this" only
    if the bound actual parameter is settable, and returns NULL otherwise.
    ae91690d
ps.result 140 KB