• Sujatha's avatar
    MDEV-21490: binlog tests fail with valgrind: Conditional jump or move depends... · 599a0609
    Sujatha authored
    MDEV-21490: binlog tests fail with valgrind: Conditional jump or move depends on uninitialised value in sql_ex_info::init
    
    Problem:
    =======
    P1) Conditional jump or move depends on uninitialised value(s)
        sql_ex_info::init(char const*, char const*, bool) (log_event.cc:3083)
    
    code: All the following variables are not initialized.
    ----
      return ((cached_new_format != -1) ? cached_new_format :
        (cached_new_format=(field_term_len > 1 || enclosed_len > 1 ||
        line_term_len > 1 || line_start_len > 1 || escaped_len > 1)));
    
    P2) Conditional jump or move depends on uninitialised value(s)
        Rows_log_event::Rows_log_event(char const*, unsigned
          int, Format_description_log_event const*) (log_event.cc:9571)
    
    Code: Uninitialized values is reported for 'var_header_len' variable.
    ----
      if (var_header_len < 2 || event_len < static_cast<unsigned
          int>(var_header_len + (post_start - buf)))
    
    P3) Conditional jump or move depends on uninitialised value(s)
        Table_map_log_event::pack_info(Protocol*) (log_event.cc:11553)
    
    code:'m_table_id' is uninitialized.
    ----
      void Table_map_log_event::pack_info(Protocol *protocol)
      ...
      size_t bytes= my_snprintf(buf, sizeof(buf), "table_id: %lu (%s.%s)",
                                  m_table_id, m_dbnam, m_tblnam);
    
    Fix:
    ===
    P1 - Fix)
    Initialize cached_new_format,field_term_len, enclosed_len, line_term_len,
    line_start_len, escaped_len members in default constructor.
    
    P2 - Fix)
    "var_header_len" is initialized by reading the event buffer. In case of an
    invalid event the buffer will contain invalid data. Hence added a check to
    validate the event data. If event_len is smaller than valid header length
    return immediately.
    
    P3 - Fix)
    'm_table_id' within Table_map_log_event is initialized by reading data from
    the event buffer. Use 'VALIDATE_BYTES_READ' macro to validate the current
    state of the buffer. If it is invalid return immediately.
    599a0609
log_event.h 150 KB