• Anurag Shekhar's avatar
    Bug#37740 Server crashes on execute statement with full text search and · c77b836a
    Anurag Shekhar authored
              match against.
    
    
    Server crashes when executing prepared statement with duplicating
    MATCH() function calls in SELECT and ORDER BY expressions, e.g.:
    SELECT MATCH(a) AGAINST('test') FROM t1 ORDER BY MATCH(a) AGAINST('test')
    
    This query gets optimized by the server, so the value returned
    by MATCH() from the SELECT list is reused for ORDER BY purposes.
    To make this optimization server is comparing items from
    SELECT and ORDER BY lists. We were getting server crash because
    comparision function for MATCH() item is not intended to be called
    at this point of execution.
    
    In 5.0 and 5.1 this problem is workarounded by resetting MATCH()
    item to the state as it was during PREPARE.
    
    In 6.0 correct comparision function will be implemented and
    duplicating MATCH() items from the ORDER BY list will be
    optimized.
    
    mysql-test/r/fulltext.result:
      Updated with the test case for Bug#37740
    mysql-test/t/fulltext.test:
      A test case for Bug#37740.
    sql/item_func.h:
      True initialization of 'table' happens in ::fix_fields(). As
      Item_func_match::eq() may be called before ::fix_fields(), it is
      expected that 'table' is initialized to 0 when it is reused.
      
      This is mostly affecting prepared statements, when the same item
      doesn't get destroyed, but rather cleaned up and reused.
    c77b836a
item_func.h 44.8 KB