mariadb/mysql-test/main/filesort_pack.result
Alexander Barkov 6487b8e330 MDEV-27307 main.ctype_utf8mb4_uca_allkeys tests fail with Valgrind/MSAN
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 f52bf92014 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 f52bf92014, 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.
2021-12-21 17:39:23 +04:00

29 lines
626 B
Text

#
# Start of 10.5 tests
#
#
# MDEV-27307 main.ctype_utf8mb4_uca_allkeys tests fail with Valgrind/MSAN
#
# In this scenario packing is fully disabled:
# - The sortkey is of a fixed width data type
# - The addon fields have too small potential savings
SET NAMES latin1;
CREATE TABLE t1 (
code INT NOT NULL,
str VARCHAR(5) CHARACTER SET latin1 NOT NULL
) ENGINE=MyISAM;
FOR i IN 0..50
DO
INSERT INTO t1 VALUES (i, REPEAT('a',1));
END FOR;
$$
SELECT COUNT(*) FROM t1;
COUNT(*)
51
SET sort_buffer_size=1024;
SELECT HEX(code), HEX(str) FROM t1 ORDER BY HEX(str);
SET sort_buffer_size=DEFAULT;
DROP TABLE t1;
#
# End of 10.5 tests
#