• Monty's avatar
    MDEV-31893 Valgrind reports issues in main.join_cache_notasan · 2aea9387
    Monty authored
    This is also related to
    MDEV-31348 Assertion `last_key_entry >= end_pos' failed in virtual bool
               JOIN_CACHE_HASHED::put_record()
    
    Valgrind exposed a problem with the join_cache for hash joins:
    =25636== Conditional jump or move depends on uninitialised value(s)
    ==25636== at 0xA8FF4E: JOIN_CACHE_HASHED::init_hash_table()
              (sql_join_cache.cc:2901)
    
    The reason for this was that avg_record_length contained a random value
    if one had used SET optimizer_switch='optimize_join_buffer_size=off'.
    
    This causes either 'random size' memory to be allocated (up to
    join_buffer_size) which can increase memory usage or, if avg_record_length
    is less than the row size, memory overwrites in thd->mem_root, which is
    bad.
    
    Fixed by setting avg_record_length in JOIN_CACHE_HASHED::init()
    before it's used.
    
    There is no test case for MDEV-31893 as valgrind of join_cache_notasan
    checks that.
    I added a test case for MDEV-31348.
    2aea9387
no_valgrind_without_big.inc 355 Bytes