Home - Waterfall Grid T-Grid Console Builders Recent Builds Buildslaves Changesources - JSON API - About

Console View


Categories: connectors experimental galera main
Legend:   Passed Failed Warnings Failed Again Running Exception Offline No data

connectors experimental galera main
Alexander Barkov
MDEV-41527 MEDIUMTEXT gets truncated to TINYTEXT in assoc array RECORD field

Adding 13.1 specific tests with package-wide data types.
Georgi (Joro) Kodinov
MDEV-42175: Do not compile 32-bit instructions for wolfSSL on 64bit platforms.

WolfSSL has different implementations of integer handling functions in sp_c32.c
and sp_c64.c.
Which one is used is determined by the SP_WORD_SIZE define.
SP_WORD_SIZE is auto-detected from indirect tests, like e.g. the presence
of __uint128_t (as determined by checking the HAVE___UINT128_T define).
Checking for this data type triggers SP_WORD_SIZE to be 64 on Mac (arm64)
and causes the code in sp_c32.c to be compiled out.
This also fixes the UBSAN warnings in it.

See https://github.com/wolfSSL/wolfssl/issues/11874 for details on these
warnings.

Fixed by adding a check for __uint128_t in wolfssl's cmake file and by
exporting the HAVE___UINT128_T define to all wolfssl related headers.
The latter is required since some of the headers used by the server
rely on this define.

Note that the code in sp_c64.c is supposedly more optimized for 64bit
platforms, so some modest performance improvement is also possible.
Sergei Golubchik
MDEV-41458 Assertion `n > 0 && n < SINUSES_CALCULATED*2+1' failed in get_n_sincos()

With tiny *ex and *ey the sum of squares underflows and q becomes inf,
use hypot() which is under- and overflow safe.

Also, fix ab/(d*d) divison, for good measure
Marko Mäkelä
MDEV-40935: Infinite loop in SET GLOBAL innodb_log_archive

log_t::set_archive(): Ensure that a log checkpoint will be written
even if no dirty pages exist in the buffer pool. This was reproduced
with an intermittent livelock during the test innodb.log_file_size_online.
Marko Mäkelä
MDEV-42009: Set GLOBAL innodb_log_file_size=ON is not crash safe

log_t::set_archive(): If the log is memory-mapped
(on /dev/shm or on a DAX mounted file system),
zero-fill the rest of the file before updating the header,
so that any old garbage from innodb_log_archive=OFF format
will be properly discarded before recovery.
Vladislav Vaintroub
MDEV-38741 mtr: do not suppress the reason of a client disconnect

The global suppressions of "Aborted connection", in mariadb-test-run.pl
and mtr_warnings.sql, hid the line that the client disconnect watcher
writes when it aborts a command: "Aborted connection N to db: 'x' user:
'u' host: 'h' (Client disconnected)". Nothing showed when the watcher
aborted a connection that it should have left alone. main.locale found
one, because its server log is in German and the English entry did not
match.

Make the two entries skip a line that ends in "(Client disconnected)".
Other aborted connections are suppressed as before.

The tests that drop a client on purpose accept the reason:
have_disconnect_watcher.inc, which the tests of the watcher include,
and dirty_close, loaddata, sp_notembedded, ssl_timeout, mysqltest,
innodb_bug38231, innodb.xa_recovery, mysql_client_test,
mysql_client_test_nonblock, mysql_client_test_comp,
rpl_semi_sync_shutdown_await_ack, spider/bugfix.mdev_35959 (a Spider
link that times out), main.mysqldump (mariadb-import can leave a LOAD DATA
running when it fails, MDEV-42164) and
mariabackup.nolock_ddl_during_backup_end (mariabackup ends in the middle
of a backup). The Connector/C tests of the unit suite close connections
on purpose, but cannot call mtr.add_suppression(), so suite.pm adds it
before each of them.

A replica closes its connection on purpose when it is stopped, in any
phase of its setup, also while the master runs one of its first
queries. rpl_init.inc accepts the reason for every server of the
replication tests, without writing it to the binlog. A binlog dump
thread logs its disconnect with another message, and only with
log_warnings=4.

Assisted-by: Claude:claude-sonnet-5-5
Sergei Golubchik
MDEV-41622 INSERT crashes on deeply nested GeometryCollection

- get_data_size() and init_from_wkb() return their error values on
  stack overrun, not a valid-looking length
- add stack checks to the remaining recursive GeometryCollection
  methods: wkt, json, mbr, area, length, dimension, store_shapes
- test non-GEOMETRY column and SELECT paths

Assisted-by: Claude:claude-opus-5-5
Elena Stepanova
MDEV-41085 Enable MTR tests on Windows: rpl suite

rpl.rpl_row_mysqlbinlog fails because apparently the client command
line on Windows cannot interpret the literal cp932 string which is
passed to it. Since the point of the test is not how the original
INSERT happens, but how it further works while replaying the binlog,
it should be acceptable to insert a hex-encoded value
Sergei Golubchik
MDEV-41801 "performance_schema" is compared case-sensitively in the engine, case-insensitively elsewhere

With lower_case_table_names=0 the performance_schema engine discovered
its tables only under the exact name, while ACL checks, is_perfschema_db()
and mariadb-dump matched the name case-insensitively. A database named,
for example, PERFORMANCE_SCHEMA was an ordinary database that got
performance_schema access rules.

Compare the name case-insensitively in the engine too.

Assisted-by: Claude:claude-opus-5-5
Oleksandr Byelkin
new columnstore 25.10.8
Marko Mäkelä
MDEV-41395 fil_space_t::create() may release fil_system.mutex

If fil_space_t::create() ends up releasing fil_system.mutex for
invoking fil_crypt_threads_signal(), another thread may grab
fil_system.mutex and find a tablespace that contains no data files.
Let us fix this race condition and remove some checks that now
are redundant.

By default fil_crypt_must_default_encrypt() holds, and then
fil_crypt_thread() waits indefinitely in wait_for_work() once the
default_encrypt list has been exhausted. A tablespace for which no
fil_crypt_threads_signal() is issued would therefore never be
encrypted at all.

fil_space_t::create(): Do not invoke fil_crypt_threads_init();
let the caller do that. During database startup, before
fil_crypt_threads_init() has been invoked, there is no point to
invoke this function; the encryption queues will be properly
set up for the tablespaces that have been opened by that time.

fil_ibd_create(): Invoke fil_crypt_threads_signal() after
invoking fil_space_t::clear_stopped() and releasing fil_system.mutex.

fil_crypt_threads_signal(): Check that fil_crypt_threads_init()
has been called. The function dict_table_open_on_name() will be
invoked during early server startup.

dict_table_open_on_name(): Invoke fil_crypt_threads_init()
at the end if the table was loaded into the cache and the
tablespace likely as well. This should be the main code path
through which old tablespaces are opened via SQL.

dict_load_tablespace(): Invoke fil_crypt_threads_signal(), because
fil_ibd_open() may have added the tablespace to
fil_system.default_encrypt_tables. This is the single point through
which every dictionary-driven tablespace open passes; it is only
invoked by dict_load_table_one(), hence by dict_sys_t::load_table().

We will not invoke fil_crypt_threads_init() in
dict_load_table_on_id() or dict_sys.load_table(); it will instead
be invoked at a higher level, typically when a table definition is
first loaded by name, in dict_table_open_on_name().

buf_dump_load_func(): After the non-first buf_load(), invoke
fil_crypt_threads_signal() in order to start the encryption
of any newly loaded tablespaces.

drop_garbage_tables_after_restore(), wsrep_append_foreign_key(),
ha_innobase::create(), ha_innobase::truncate(),
row_rename_table_for_mysql(), i_s_sys_tables_fill_table(),
i_s_sys_tables_fill_table_stats(): Invoke fil_crypt_threads_signal()
in case some tablespace metadata was loaded.

row_import_cleanup(): Invoke fil_crypt_threads_signal() to register
the imported tablespace.

i_s_sys_tablespaces_fill_table(), fil_system_t::find(),
Datafile::validate_first_page(), fil_space_t::name(),
fil_space_t::read_page0(), fil_space_t::prepare_acquired(),
fil_space_t::try_to_close(), fil_crypt_default_encrypt_tables_fill(),
fil_system_t::default_encrypt_next(): Remove a now-redundant check
for a tablespace that contains no files.

srv_n_fil_crypt_threads_started: Declare as Atomic_relaxed<uint>,
for the unlocked read in fil_crypt_threads_signal().

Co-developed by: Thirunarayanan Balathandayuthapani
Sergei Petrunia
Fixup: opt_ctx_can_read_all_columns() is not used for VIEWs.
Sergei Golubchik
MDEV-41808 repeated CTE references keep reparsing exponentially on time and memory

Every reference to a CTE after the first re-parses its specification and
recursively resolves the references inside the clone, so a chain of CTEs
each referencing the previous one twice expands to 2^N re-parses from
linear-size SQL, exhausting CPU and memory at parse time.

Bound the number of specification clones per statement.

Assisted-by: Claude:claude-opus-4-8
Sergei Golubchik
MDEV-41803 mariadb-binlog --raw takes the output file name from Rotate events without checking it

mariadb-binlog --raw appended the file name from a Rotate event to the
--result-file prefix, so a malicious server could make it write files
outside that directory.

Reject a Rotate event file name with a directory component - a
legitimate server only puts a bare file name in the Rotate event

Assisted-by: Claude:claude-opus-5-5
Sergei Golubchik
MDEV-41496 OOB write with RPAD() crash and multi-byte charsets and uservar

Item's charset is metadata, it's known at fix_fields and does not
change later. User variables can violate this invariant if they're
changed and used in the same query.

Let's always wrap such variables in Item_func_conv_charset()
to make sure the caller always gets the same fixed charset, no matter
what the actual variable value is.

Variables that aren't changed in the same query do not get this
unnecessary conversion.

Note that in --ps the charset might resolve differently. This is not a
bug, querying and modifying a user variable in the same query is a
documented UB. But both in nm and in ps both arguments of RPAD() always
have the same charset, so the result is internally consistent and
there's no OOB access.
Oleksandr Byelkin
Merge branch '10.11' into 11.4
Marko Mäkelä
Merge 11.8 into 12.3
Miroslav Rajcic
Bug#39905057: MySQL ExtractValue unclosed CDATA length underflow causes mysqld heap overflow / crash

Problem:
========
The XML scanner reports an unterminated <![CDATA[ section as a valid
CDATA token. Its end pointer remains at the opening delimiter, while
the parser unconditionally removes the opening and closing delimiters.

This underflows the value length. ExtractValue() can subsequently pass
that length to String::append(), causing a heap overwrite and mysqld
crash.

Root Cause:
===========
my_xml_scan() only sets the token end when it finds ]]>, but
my_xml_parse() assumes every CDATA token is complete.

Solution:
=========
Detect EOF before the CDATA terminator and return a parse error before
calling the XML value handler.

Add an ExtractValue() regression test verifying that unterminated CDATA
is rejected with a warning.

Change-Id: I142bafd9ddea185f6b2e87a80af4894f10168291

Fixes MDEV-39571, MDEV-41407
Sergei Golubchik
MDEV-41841 OOB read on loose index scan of MIN/MAX with IS [NOT] NULL

QUICK_GROUP_MIN_MAX_SELECT::add_range built the QUICK_RANGE key by
copying min_max_arg_len bytes straight from the SEL_ARG value, which
for an IS [NOT] NULL bound points at the 20-byte is_null_string; a
MIN/MAX column wider than that read past the static buffer.

Build the key image through SEL_ARG::store_min()/store_max() as
every other caller does: they synthesize a full-width NULL key and
never copy from is_null_string, which is sized for memcmp only.

Assisted-by: Claude:claude-opus-4-8
Sergei Golubchik
MDEV-41804 deeply nested ROWs crash

add check_stack_overrun()
Sergei Golubchik
Item_param::set_param_time and Item_param::set_param_datetime OOB read

Item_param::set_param_time and Item_param::set_param_datetime could
potentially read 4 bytes beyond the value end of the corrupted packet
Marko Mäkelä
Merge 12.3 into 13.1
Oleksandr Byelkin
Merge branch '11.4' into 11.8
Sergei Golubchik
CONNECT: reset vptr before writing an object to a file

pointers make no sense there
Marko Mäkelä
MDEV-40935: Assertion os_file_set_size() failed during shutdown

os_file_set_size(): Consistently handle EINTR also after server
shutdown has been initiated. This will avoid a crash when an
innodb_log_archive=ON log file needs to be created or extended
during shutdown. This only affects the posix_fallocate(2) or
Linux fallocate(2) code path; if the file is being extended by
regular writes, we will retry in case of EINTR.

On Microsoft Windows, there is no clear documentation what would happen
if the process is being terminated while SetFilePointerEx() or
SetEndOfFile() are in progress.
Oleksandr Byelkin
Fix false "Thread stack overrun" in local connection queries under ASAN

Problem: send_command() for a mysql_real_connect_local() connection with
its own THD set thd->thread_stack to the address of a local variable.
With ASAN use-after-return detection that variable lives on a fake heap
stack, so check_stack_overrun() computed a bogus stack usage and failed
the query; password_reuse_check then sporadically rejected the first
GRANT on amd64-ubasan-clang-22 builders.

Fix: add THD::set_thread_stack(), which takes the real stack start of the
current OS thread from my_get_stack_bounds(), and use it there and in
THD::store_globals(). Remove the thread_stack= &local hints that were
always overwritten by store_globals() anyway.
password_reuse_check.test now shows the plugin's warnings if the first
GRANT is rejected.

Assisted-by: Claude:claude-opus-5-5
Oleksandr Byelkin
Merge branch '12.3' into 13.1
Sergei Golubchik
MDEV-41822 mariadb-binlog ASAN crash on corrupted binlog

1. verify that the null bitmap length doesn't overshoot row event end
2. pass the buffer length to calc_field_size(), so that it'd never read
  beyond the end
Oleksandr Byelkin
Merge branch '11.8' into 12.3
Jan Lindström
Fix README
Dave Gosselin
MDEV-42078:  Map macOS errno 63 in main.create_notembedded

Maps errno 63 to 36 in the output of the first CREATE TABLE in
main.create_notembedded, as main.symlink does.  That statement creates
a table whose file name is 255 bytes and expects ENAMETOOLONG in the
error, which is 36 on Linux and 63 on macOS.  The test has failed on
macOS since d0b279f1852 added it.

Assisted-By: Claude Opus 5.5 <[email protected]>
Elena Stepanova
MDEV-41085 Enable MTR tests on Windows: rpl suite

rpl.rpl_read_old_relay_log_info fails because the test overrrides
relay-log.info with the Linux-style ./slave-relay-bin.000001,
while Windows uses the format with backslashes, .\slave-relay-bin.000001
Sergei Golubchik
UndefinedBehaviorSanitizer: nullptr-with-nonzero-offset rdb_datadic.cc:558
Sergei Golubchik
cleanup: undefined function declarations
Sergei Golubchik
update C/C
Sergei Golubchik
stabilize I_S.VECTOR_INDEXES.INDEX_SIZE after an INSERT

innodb needs time for the value to stop changing. wait for it.
Sergei Golubchik
fix RPAD(), LPAD() and INSERT() not to mangle its arguments

they used to overwrite the charset of their arguments, this is
incorrect and led to wrong results
Marko Mäkelä
Merge 11.4 into 11.8
Marko Mäkelä
MDEV-42009: Set GLOBAL innodb_log_archive=ON is not crash safe

log_t::header_rewrite(): Before setting log_sys.archive=true,
ensure that any garbage entries at the end of the file will be
zeroed out so that they cannot be mistaken for newer records.
On Linux and Microsoft Windows we will attempt a shortcut for
writing zeroes, before falling back to log_file_t::write().

log_t::set_archive(): Block concurrent writes to the log on every
platform, because log_t::header_rewrite() now requires exclusive
access to the log file.

Reviewed by: Alessandro Vetere
Elena Stepanova
MDEV-41085 Enable MTR tests on Windows: rpl suite

rpl.rpl_change_master_long_channel_name fails on Windows because it
expects a 252-character name (base name, excluding the path) to be
valid; on Windows the whole path is limited to 260 characters, so
252-character name already fails