• Kristofer Pettersson's avatar
    Bug#47627 SET @@{global.session}.local_variable in stored routine causes crash · 834ba322
    Kristofer Pettersson authored
    Adding @@session and @@global prefixes to a
    declared variable in a stored procedure the server
    would lead to a crash.
    
    The reason was that during the parsing of the
    syntactic rule 'option_value' an uninitialized
    set_var object was pushed to the parameter stack
    of the SET statement. The parent rule
    'option_type_value'  interpreted the existence of
    variables on the parameter stack as an assignment
    and wrapped it in a sp_instr_set object.
    
    As the procedure later was executed an attempt
    was made to run the method 'check()' on an
    uninitialized member object (NULL value) belonging
    to the previously created but uninitialized object.
    
    
    sql/sql_yacc.yy:
      * Assign the option_type at once since it is needed by the next
        parsing rule (internal_variable_name)
      * Rearranged the if statement to reduce negations and gain more
        clarity of code.
      * Added check for option_type to better detect if current
        variable is a SP local variable or a system variable.
    834ba322
sql_yacc.yy 402 KB