• Sergey Glukhov's avatar
    Bug#38999 valgrind warnings for update statement in function compare_record() · 60a66c45
    Sergey Glukhov authored
    Valgrind warning happpens because of uninitialized null bytes.
    In row_sel_push_cache_row_for_mysql() function we fill fetch cache
    with necessary field values, row_sel_store_mysql_rec() is called
    for this and leaves null bytes untouched.
    Later row_sel_pop_cached_row_for_mysql() rewrites table record
    buffer with uninited null bytes. We can see the problem from the
    test case:
    At 'SELECT...' we call row_sel_push...->row_sel_store...->row_sel_pop_cached...
    chain which rewrites table->record[0] buffer with uninitialized null bytes.
    When we call 'UPDATE...' statement, compare_record uses this buffer and
    valgrind warning occurs.
    The fix is to init null bytes with default values.
    
    
    mysql-test/suite/innodb/r/innodb_mysql.result:
      test case
    mysql-test/suite/innodb/t/innodb_mysql.test:
      test case
    mysql-test/t/ps_3innodb.test:
      enable valgrind testing
    storage/innobase/row/row0sel.c:
      init null bytes with default values as they might be
      left uninitialized in some cases and these uninited bytes
      might be copied into mysql record buffer that leads to
      valgrind warnings on next use of the buffer.
    60a66c45
innodb_mysql.test 16.9 KB