Skip to content

Test for MDEV-39788#5147

Open
ParadoxV5 wants to merge 30 commits into
10.11from
MDEV-39788.test
Open

Test for MDEV-39788#5147
ParadoxV5 wants to merge 30 commits into
10.11from
MDEV-39788.test

Conversation

@ParadoxV5
Copy link
Copy Markdown
Contributor

@ParadoxV5 ParadoxV5 commented May 29, 2026

MDEV-39788 found that the recent refactor on the main (now 12.3) branch forgot that the line count includes the line count line itself.
This test checks future changes in any supported version that they don’t make this mistake again.


This PR is currently based on tag mariadb-10.11.18, so the MDEV-39788 fix can build on it; though somehow this tag and the 10.11 branch are currently well divergent.
(Heh, our spambot is gonna stress out.)

montywi and others added 26 commits May 15, 2026 15:11
Calling itself will cause extensive memory usage that can kill
the machine when it runs out of memory (happend to me).

Fixed by having mtr.out-of-source checking that it is not calling itself.
In addition added a check for cmake to expand symlinks to make the
check if we are running mtr 'out of source' safer.

Author: Sergei Golubchik <serg@mariadb.org> (CMakeList.txt changes)
Add verification of wsrep_sst_donor, wsrep_sst_method and
wsrep_sst_receive_address so that they contain only
supported characters. But allow NULL or empty value.
Joiner mariadbd exits when SST is aborted; the exit code varies by
platform (clean 0 on some systems, signalled 134 / 1 on others).

pkill exit code can also vary by platform (clean 0 on some systems,
signalled 1 others).
check for tablename-safe characters in backed up table files
according to the rfc, the length is 2 bytes,
but the max length is 226 and there's a validity
check for length <= 240.
…mpare

let's show stable values that don't change between runs
check data length for Gis_point
max_subnet estimate was off by one.

* only allow address with a known family
  (trips an assert in addr_matches_subnet())
* adjust max_subnet estimate accordinly
GROUP_CONCAT is limited by group_concat_max_len,
but also, as a string function it must respect max_allowed_packet.

Let's introduce THD::gconcat_max_len() helper to simplify checks.

Also:
* make max group_concat_max_len value the same as max max_allowed_packet
* use the same MY_MIN((ulonglong) ..., UINT_MAX32) in
  Item_func_json_objectagg as in Item_func_group_concat
* use overflow-safe type for lengths in Item_func_quote
  (MAX_MAX_ALLOWED_PACKET is 1G so uint cannot overflow yet, but it's
  a fragile assumption)
…eters

Issue:
wsrep_sst_rsync.sh interpolated WSREP_SST_OPT_REMOTE_USER and
WSREP_SST_OPT_REMOTE_PSWD verbatim. Because both values originate from
the joiner side of the SST request, a newline in either could splice
an extra directive into the donor-written stunnel.conf (silently
downgrading peer-cert verification) or an extra line into the rsync
magic file. MDEV-39413 had introduced safe() for the same threat class
in wsrep_sst_mariabackup but did not extend it to the rsync script.

Solution:
Routing the rsync interpolations through safe() closes the gap, and
extending safe() to also reject tab and newline ensures multi-line
values cannot survive into a config-file heredoc.
This is regression caused by MDEV-28750 commit 1f34996.

In multi-table update table list could contain tables
that are not yet opened because update does not really
change them. This can happen e.g. when update changes
table that is referenced by foreign key by table that
is not part of multi-table update.

Fixed by first checking is wsrep write set size limited.
If it is not multi-table update can continue normally.
If write set size is limited then check has update
updated both transactional and non-transactional tables
and those tables that have not yet been opened can be
safely skipped as they are not updated.
…-supplied member fields

Issue:
wsrep_notify_status() interpolated members[i].name() (the peer's
wsrep_node_name) and members[i].incoming() verbatim into a command
string that is then executed via 'sh -c' by wsp::process. A peer
joining the cluster with shell metacharacters in its wsrep_node_name
or wsrep_node_incoming_address caused arbitrary commands to run on
every cluster member that had wsrep_notify_cmd configured.
MDEV-39413 introduced safe() for the same threat class in the SST
scripts but did not cover the C++ wsrep_notify path.

Solution:
Validate each substituted field against a narrow whitelist before
interpolating. Node name allows alnum and -_. ; node address
additionally allows :[]/ for host:port and [ipv6] forms. On bad
input the notification is skipped with an error log instead of
forwarding the unsafe value to sh -c.
MDEV-39788 found that the recent refactor on the `main` (now 12.3)
branch forgot that the line count includes the line count line itself.
This test checks future changes in any supported
version that they don’t make this mistake again.
@ParadoxV5 ParadoxV5 requested a review from bnestere May 29, 2026 18:35
@ParadoxV5 ParadoxV5 added MariaDB Corporation Replication Patches involved in replication labels May 29, 2026
@CLAassistant
Copy link
Copy Markdown

CLAassistant commented May 29, 2026

CLA assistant check
Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you all sign our Contributor License Agreement before we can accept your contribution.
4 out of 7 committers have signed the CLA.

✅ dbart
✅ ParadoxV5
✅ janlindstrom
✅ hemantdangi-gc
❌ dr-m
❌ vuvova
❌ montywi
You have signed the CLA already but the status is still pending? Let us recheck it.

gemini-code-assist[bot]

This comment was marked as spam.

ParadoxV5 added 4 commits May 29, 2026 12:57
use RESET SLAVE ALL in case other tests restart the server without
specifying `--skip-slave-start` (why not default in MTR I do not know)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

MariaDB Corporation Replication Patches involved in replication

Development

Successfully merging this pull request may close these issues.

8 participants