• Alexander Barkov's avatar
    MDEV-27307 main.ctype_utf8mb4_uca_allkeys tests fail with Valgrind/MSAN · 6487b8e3
    Alexander Barkov authored
    In case when filesort does not use addon field packing (because of
    too small potential savings) and uses fixed width addon fields instead,
    the field->pack() call can store less bytes when the field maximum
    possible field length, e.g. in case of VARCHAR().
    The memory between the packed length and addonf->length (the maximum length)
    stayed uninitialized, which was reported by Valgrind/MSAN.
    
    The problem was introduced by f52bf920 in 10.5,
    which removed the tail initialization (probably unintentionally).
    
    Restoring the bzero() in the fixed length branch,
    so in case when pack() stores less bytes than addonf->length says,
    the trailing bytes gets initialized.
    
    Note, before f52bf920, the bzero()
    was under HAVE_valgrind conditional compilation. Now it's being added
    unconditionally:
    - MSAN also reported the problem, so it's not only Valgrind specific.
    - As Serg proposed, conditional initialization is bad - it can have
      potentional security problems as the non-initialized memory fragments
      can store various pieces of essential information, e.g. passwords.
    6487b8e3
filesort_pack.result 626 Bytes