• timour@askmonty.org's avatar
    MDEV-5104 crash in Item_field::used_tables with broken order by · 883af99e
    timour@askmonty.org authored
    Analysis:
    st_select_lex_unit::prepare() computes can_skip_order_by as TRUE.
    As a result join->prepare() gets called with order == NULL, and
    doesn't do name resolution for the inner ORDER clause. Due to this
    the prepare phase doesn't detect that the query references non-exiting
    function and field.
      
    Later join->optimize() calls update_used_tables() for a non-resolved
    Item_field, which understandably has no Field object. This call results
    in a crash.
    
    Solution:
    Resolve unnecessary ORDER BY clauses to detect if they reference non-exising
    objects. Then remove such clauses from the JOIN object.
    883af99e
item_subselect.cc 168 KB