> For the complete documentation index, see [llms.txt](https://mariadb.com/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://mariadb.com/docs/release-notes/community-server/12.3/12.3.3.md).

# MariaDB 12.3.3 Release Notes

<a href="https://mariadb.com/downloads" class="button primary">Download</a> <a href="/pages/5TNyXqoUKU60rS64w9UM" class="button secondary">Release Notes</a> <a href="/pages/8jF4raLAxYxkbkAfzovv" class="button secondary">Changelog</a> <a href="https://github.com/mariadb-corporation/mariadb-docs/tree/main/release-notes/community-server/12.3/what-is-mariadb-118.md" class="button secondary">Overview of 12.3</a>

[<sup>*Alternate download from mariadb.org*</sup>](https://downloads.mariadb.org/mariadb/12.3.3/)

**Release date:** TBD

MariaDB 12.3.3 is a [***Stable (GA)***](/docs/release-notes/community-server/about/release-criteria.md) release. It is an evolution of [MariaDB 11.7](/docs/release-notes/community-server/old-releases/11.7/what-is-mariadb-117.md) with several entirely new features.

[MariaDB 12.3](/docs/release-notes/community-server/12.3/mariadb-12.3-changes-and-improvements.md) is a long-term release, maintained until June 2029.

{% hint style="success" %}
**For an overview of MariaDB 12.3 see the** [**MariaDB 12.3 Changes and Improvements**](/docs/release-notes/community-server/12.3/mariadb-12.3-changes-and-improvements.md) **page.**
{% endhint %}

Thanks, and enjoy MariaDB!

## Notable Items

### Storage Engines

#### InnoDB Storage Engine

* Some race conditions were fixed in the INFORMATION\_SCHEMA views innodb\_trx, innodb\_locks, innodb\_lock\_waits. ([MDEV-39344](https://jira.mariadb.org/browse/MDEV-39344))
* The InnoDB deadlock detector could report incorrectly which transaction is being rolled back. ([MDEV-37977](https://jira.mariadb.org/browse/MDEV-37977))
* In --bootstrap mode, it was possible for a partially initialized InnoDB to be shutdown, and it was possible that this could crash the server ([MDEV-39541](https://jira.mariadb.org/browse/MDEV-39541))
* Assertion \`!thd || !coordinator\_thd' failed ([MDEV-39706](https://jira.mariadb.org/browse/MDEV-39706))
* Assertion \`lsn != 0' failed ([MDEV-39707](https://jira.mariadb.org/browse/MDEV-39707))
* Fixed stale encryption metadata on compressed-only pages by clearing it, and fixed an assertion failure during extent reservation ([MDEV-39795](https://jira.mariadb.org/browse/MDEV-39795))
* Truncate of temporary table with ENCRYPTED=NO crashes under innodb\_encrypt\_tables=FORCE ([MDEV-40085](https://jira.mariadb.org/browse/MDEV-40085))
* Fixed a rare InnoDB race during XA PREPARE where a concurrent buffer-pool resize could cause the wrong lock latch to be released, risking a hang or crash ([MDEV-40218](https://jira.mariadb.org/browse/MDEV-40218))
* When executing crash recovery in multiple batches, InnoDB may fail to extend a file and crash on a subsequent write to it ([MDEV-40756](https://jira.mariadb.org/browse/MDEV-40756))
* Redundant calls to convert implicit record locks to explicit ones when table S-lock is held ([MDEV-40805](https://jira.mariadb.org/browse/MDEV-40805))
* Fixed an assertion failure with spatial index predicate locks ([MDEV-39800](https://jira.mariadb.org/browse/MDEV-39800))
* InnoDB system tablespace autoshrink fails when the tail extent is an empty XDES\_FREE\_FRAG extent ([MDEV-39963](https://jira.mariadb.org/browse/MDEV-39963))
* InnoDB Defragmentation of BASE\_IDX in SYS\_VIRTUAL failed: Data structure corruption ([MDEV-40332](https://jira.mariadb.org/browse/MDEV-40332))
* Fixed a performance regression in the oltp\_read\_write benchmark with transaction-isolation=READ-COMMITTED; regression introduced in 10.3 ([MDEV-21423](https://jira.mariadb.org/browse/MDEV-21423))
* Reduced buffer pool flushing contention under sustained write pressure ([MDEV-39600](https://jira.mariadb.org/browse/MDEV-39600))
* Improved lock granularity in lock\_move\_reorganize\_page() ([MDEV-40128](https://jira.mariadb.org/browse/MDEV-40128))
* Spin on each lock release to try to make releasing all transactional locks more robust to transients, reducing the probability of taking an exclusive latch later ([MDEV-40129](https://jira.mariadb.org/browse/MDEV-40129))
* Avoid a redundant CAS operation in the flusher thread ([MDEV-40210](https://jira.mariadb.org/browse/MDEV-40210))
* lock\_move\_reorganize\_page() early exit check is useful only with lock elision ([MDEV-40427](https://jira.mariadb.org/browse/MDEV-40427))

#### Archive Storage Engine

* REPAIR command on ARCHIVE table destroys TEXT Data ([MDEV-24245](https://jira.mariadb.org/browse/MDEV-24245))

#### Aria Storage Engine

* Symlinked table name is not encoded ([MDEV-40358](https://jira.mariadb.org/browse/MDEV-40358))
* MyISAM/Aria silently truncate extensions from filenames, if too long ([MDEV-40395](https://jira.mariadb.org/browse/MDEV-40395))

#### Connect Storage Engine

* Fix Static Application Security Testing(SAST) warnings in Connect storage engine ([MDEV-40316](https://jira.mariadb.org/browse/MDEV-40316))
* CONNECT file udfs ignore FILE and secure\_file\_priv ([MDEV-40323](https://jira.mariadb.org/browse/MDEV-40323))
* CONNECT REST can pass arguments to curl via HTTP parameter ([MDEV-40360](https://jira.mariadb.org/browse/MDEV-40360))
* CONNECT writes unvalidated data from remote server into fixed-len buffer ([MDEV-40426](https://jira.mariadb.org/browse/MDEV-40426))
* CONNECT crashes on double(255,50) in DOS table ([MDEV-40637](https://jira.mariadb.org/browse/MDEV-40637))

#### CSV Storage Engine

* When running a DELETE on a table which is using the CSV storage engine, the server can crash ([MDEV-40636](https://jira.mariadb.org/browse/MDEV-40636))

## DuckDB Storage Engine

* duckdb.db keeps growing on frequent load of tpchsf1000 ([MDEV-40166](https://jira.mariadb.org/browse/MDEV-40166))
* UUID columns contains all zeros in DuckDB table ([MDEV-40265](https://jira.mariadb.org/browse/MDEV-40265))
* DuckDB crashes when creating a temporary duckdb table ([MDEV-40379](https://jira.mariadb.org/browse/MDEV-40379))

#### Memory Storage Engine

* heap-use-after-free in heap\_rnext with tree indexes ([MDEV-39821](https://jira.mariadb.org/browse/MDEV-39821))
* MEMORY tables incorrectly restart index scan on DELETE ([MDEV-40186](https://jira.mariadb.org/browse/MDEV-40186))

#### Mroonga Storage Engine

* Changing a table to the storage engine Mroonga and then performing a CHECK TABLE previously resulted in a crash ([MDEV-39556](https://jira.mariadb.org/browse/MDEV-39556))

#### MyISAM Storage Engine

* MyISAM crash on corrupted MYI with invalid keyseg length ([MDEV-39816](https://jira.mariadb.org/browse/MDEV-39816))
* Assertion `marked_for_read()` failed in Field\_varstring::val\_str on CHECKSUM TABLE ([MDEV-22943](https://jira.mariadb.org/browse/MDEV-22943))

#### RocksDB Storage Engine

* 32-bit size truncation in RocksDB ([MDEV-39812](https://jira.mariadb.org/browse/MDEV-39812))

### Admin statements

* KILL checks user (not priv\_user) and doesn't verify hostname ([MDEV-40554](https://jira.mariadb.org/browse/MDEV-40554))

### Authentication and Privilege System

* Overlong database names were silently accepted, but truncated to 64 chars in GRANT statements (db level) ([MDEV-39047](https://jira.mariadb.org/browse/MDEV-39047))
* An appropriately privileged user (with SUPER or SYSTEM\_VARIABLES\_ADMIN privileges) could execute shell commands as the UID of the mariadbd process because the values of the system variable wsrep\_sst\_auth , which can be modified at runtime, were not properly sanitized when used to construct a shell command ([MDEV-40027](https://jira.mariadb.org/browse/MDEV-40027))
* An appropriately privileged user (with SUPER privileges) could execute shell commands as the UID of the mariadbd process because the values of the system variable wsrep\_node\_address, which can be modified at runtime, were not properly sanitized when used to construct a shell command ([MDEV-40056](https://jira.mariadb.org/browse/MDEV-40056))
* Single quotes make SHOW CREATE USER invalid ([MDEV-40308](https://jira.mariadb.org/browse/MDEV-40308))
* GRANT PROXY with empty password incorrectly checks grantor's privileges ([MDEV-40470](https://jira.mariadb.org/browse/MDEV-40470))
* Error codes/messages reveal information about table structure ([MDEV-23086](https://jira.mariadb.org/browse/MDEV-23086))
* Roles without grants are handled wrong ([MDEV-28743](https://jira.mariadb.org/browse/MDEV-28743))
* The server does not detect changes in NULL-ability of system table columns ([MDEV-30555](https://jira.mariadb.org/browse/MDEV-30555))
* Server crashes when executing the FLUSH PRIVILEGES statement after starting the server with skip-grant-tables and creating the mysql.host table ([MDEV-37840](https://jira.mariadb.org/browse/MDEV-37840))
* SHOW TABLES allows users with only GRANT OPTION privilege to read all table names in the database "mysql" ([MDEV-37951](https://jira.mariadb.org/browse/MDEV-37951))
* handlersocket plugin default secret is empty ([MDEV-39841](https://jira.mariadb.org/browse/MDEV-39841))
* Role vs user\@localhost acl\_cache key confusion ([MDEV-40541](https://jira.mariadb.org/browse/MDEV-40541))
* DROP PACKAGE leaves PACKAGE BODY grant in mysql.procs\_priv ([MDEV-40722](https://jira.mariadb.org/browse/MDEV-40722))
* cached\_sha2\_password crashes on zero-length password ([MDEV-40058](https://jira.mariadb.org/browse/MDEV-40058))

### Character Sets

* Assertion `marked_for_read()` failure in Item\_func\_conv\_charset::Item\_func\_conv\_charset ([MDEV-33524](https://jira.mariadb.org/browse/MDEV-33524))
* Assertion `n_fields > n_cols || type & 32` failed in dict\_index\_t::init\_change\_cols on ALTER ([MDEV-39448](https://jira.mariadb.org/browse/MDEV-39448))
* Fix out of bound read in `my_mb_wc_filename`; fixed by Syed Mohammed Nayyar ([MDEV-40201](https://jira.mariadb.org/browse/MDEV-40201))
* Prepared Statement Crash in varchar\_upper\_cmp\_transformer() for '?' ([MDEV-40006](https://jira.mariadb.org/browse/MDEV-40006))
* Too long character\_set\_collations crash ([MDEV-40059](https://jira.mariadb.org/browse/MDEV-40059))
* Fixed a server crash during UNIQUE constraint checks or prefix index scans on empty BLOB/TEXT columns ([MDEV-39559](https://jira.mariadb.org/browse/MDEV-39559))

### CI

* A Gitlab CI testing configuration in the codebase was failing on Centos Stream 9; fix thanks to Fariha Shaikh of AWS ([MDEV-39928](https://jira.mariadb.org/browse/MDEV-39928))

### Compiling

* compiler error with PLUGIN\_PERFSCHEMA=NO: 'key\_file\_cnf' defined but not used \[-Werror=unused-variable] ([MDEV-39789](https://jira.mariadb.org/browse/MDEV-39789))

### Data Definition - Alter Table

* ALTER TABLE ... AUTO\_INCREMENT = NN; should return a Warning if it can not use the provided value ([MDEV-33660](https://jira.mariadb.org/browse/MDEV-33660))
* ALTER TABLE ... CONVERT ... PARTITION doesn't encode partition names ([MDEV-40413](https://jira.mariadb.org/browse/MDEV-40413))

### Data Definition - Create Table

* duplicate CHECK constraint name ([MDEV-24598](https://jira.mariadb.org/browse/MDEV-24598))
* Incorrect information in file: './test/t0.frm' on CREATE TABLE ([MDEV-28498](https://jira.mariadb.org/browse/MDEV-28498))

### Data Manipulation - Subquery

* In Oracle mode all set operators share one priority and bind left-to-right, so wrapping the accumulated prefix on each operator change enforces it ([MDEV-39522](https://jira.mariadb.org/browse/MDEV-39522))

## Data Manipulation - Update

* Correct a memory leak in the Connect engine INI type that occured when a file failed to open ([MDEV-39513](https://jira.mariadb.org/browse/MDEV-39513))

### Data types

* Standard Deviation Calculations for PROCEDURE\_ANALYSE() on will no longer overflow on large BIGINT columns until their calculation exceeds the maximium DOUBLE value ([MDEV-28374](https://jira.mariadb.org/browse/MDEV-28374))
* A WKB geometry, multi-polygon or geometry collection, with an invalid byte order field when passed to in ST\_GeomFromWKB has been corrected to return a NULL result where it previously had a valid value ([MDEV-35595](https://jira.mariadb.org/browse/MDEV-35595))
* Incorrect query result ([MDEV-38158](https://jira.mariadb.org/browse/MDEV-38158))
* A 0xHHHH / b'..' literal kept its hex\_hybrid type through COALESCE/IF/CASE/..., but was evaluated, sized and stored as a string, so it behaved differently from a bare literal (10+COALESCE(0x31) gave 11, not 59); type\_handler\_hex\_hybrid now implements the numeric side to match the bare literal: val\_int/val\_real/val\_decimal read bytes as a hybrid, Item\_decimal\_precision returns the integer precision, Item\_save\_in\_field stores like the bare literal; the traditional type merge keeps the hybrid through a typeless NULL (as for BIT), and Item\_hybrid\_func\_fix\_attributes attributes it binary/unsigned ([MDEV-39380](https://jira.mariadb.org/browse/MDEV-39380))
* Fix signed-integer-overflow in BLOB-to-integer conversion ([MDEV-39690](https://jira.mariadb.org/browse/MDEV-39690))
* Fix division function to produce correct decimal zero without sign ([MDEV-39744](https://jira.mariadb.org/browse/MDEV-39744))
* A use of uninitialised memory may have resulted in a range query on a system versioned table based on its versioning rows having an unpredictable query plan ([MDEV-40147](https://jira.mariadb.org/browse/MDEV-40147))
* SIGSEGV in collect\_indexed\_vcols\_for\_table, memory corruption by my\_copy\_8bit from charset\_info\_st::copy\_fix ([MDEV-39558](https://jira.mariadb.org/browse/MDEV-39558))

### Documentation

* Updated HELP system documentation and urls to the MariaDB Documentation ([MDEV-39584](https://jira.mariadb.org/browse/MDEV-39584))

### Dynamic Columns

* Dynamic column header missing sanity checks ([MDEV-39581](https://jira.mariadb.org/browse/MDEV-39581))
* Dynamic columns when reading an unsigned integer could overflow the 64 that was used as a shift counter; fix thanks to Syed Mohammed Nayyar ([MDEV-40200](https://jira.mariadb.org/browse/MDEV-40200))

### Encryption

* InnoDB Encryption threads no longer busy-wait and now respond quickly for innodb\_encrypt\_tables and innodb\_encryption\_rotate\_key\_age ([MDEV-34358](https://jira.mariadb.org/browse/MDEV-34358))

### Galera

* When a Galera node's state snapshot transfer (SST) was configured for encryption, either through an explicit ssl-mode or through SSL certificates in the configuration, but the encryption could not actually be established, the rsync and mariabackup SST methods silently transferred the donor's data in cleartext: rsync when the stunnel binary was not installed, and mariabackup when no usable SSL certificate and key were found, the SST now aborts with an error in these situations instead of falling back to an unencrypted transfer. ([MDEV-28233](https://jira.mariadb.org/browse/MDEV-28233))
* State Snapshot Transfer (SST) can now use different TLS certificates, keys and CAs depending on the node's role in the transfer, for the mariabackup and rsync SST methods. This lets a single instance present a client certificate when it acts as the donor (TLS client) and a server certificate when it acts as the joiner (TLS server) ([MDEV-23744](https://jira.mariadb.org/browse/MDEV-23744))
  * Eight new options are added, read from the \[sst] (or \[mysqld]) option group. Each one overrides the corresponding generic ssl-\* option for its role when set; when it is not set, the generic ssl-\* option is used, so existing configurations behave exactly as before.
  * Joiner (TLS server) role:
    * `ssl-server-ca` CA file used to verify the peer. Overrides ssl-ca when set; otherwise ssl-ca is used.
    * `ssl-server-capath` CA directory used to verify the peer. Overrides ssl-capath when set; otherwise ssl-capath is used.
    * `ssl-server-cert` Certificate the node presents. Overrides ssl-cert when set; otherwise ssl-cert is used.
    * `ssl-server-key` Private key for the certificate. Overrides ssl-key when set; otherwise ssl-key is used.
  * Donor (TLS client) role:
    * `ssl-client-ca` CA file used to verify the peer. Overrides ssl-ca when set; otherwise ssl-ca is used.
    * `ssl-client-capath` CA directory used to verify the peer. Overrides ssl-capath when set; otherwise ssl-capath is used.
    * `ssl-client-cert` Certificate the node presents. Overrides ssl-cert when set; otherwise ssl-cert is used.
    * `ssl-client-key` Private key for the certificate. Overrides ssl-key when set; otherwise ssl-key is used.
  * These are SST options read by the wsrep\_sst\_\* scripts, not server system variables. When none of the new options are set, SST behavior is identical to previous releases; the change is fully backward compatible.
* Galera state transfers (SST) now interpret the ssl-mode=VERIFY\_CA setting as documented: a node's certificate must come from a trusted certificate authority, but its name no longer has to match the server's address; previously, VERIFY\_CA was incorrectly treated as strictly as VERIFY\_IDENTITY, which could block state transfers between healthy nodes whose certificates did not name their hosts; deployments that want the stricter name matching should set ssl-mode=VERIFY\_IDENTITY explicitly ([MDEV-28239](https://jira.mariadb.org/browse/MDEV-28239))
* Galera SST aborted during its TLS certificate check when the node's certificate file bundled the leaf certificate with an intermediate CA and the CA file contained only the root, a common layout with certificates issued by cert-manager and similar PKIs (MDEV-35812); the check validated the leaf certificate directly against the CA file and could not complete the chain through the bundled intermediate; it now takes bundled intermediates into account, so such certificate chains verify correctly and the SST proceeds ([MDEV-35812](https://jira.mariadb.org/browse/MDEV-35812))
* Fixed a rare Galera cluster lockup where, after a write set could not be applied on one node, that node would silently stay in the cluster instead of stepping out; new write sets kept arriving but could not be processed, leaving the cluster unable to make progress until the node was killed and restarted; the node now reports the apply failure to the cluster, loses the consistency check, and is evicted automatically so it can rejoin via state transfer ([MDEV-38843](https://jira.mariadb.org/browse/MDEV-38843))
* Remove deprecated wsrep\_causal\_reads as a configuration option from provided wsrep.cnf ([MDEV-39691](https://jira.mariadb.org/browse/MDEV-39691))
* Fix incomplete cleanup in Galera MTR tests failing under --repeat ([MDEV-38386](https://jira.mariadb.org/browse/MDEV-38386))
* A high priority abort, by the Galera replication applier may have left the aborted victim's transaction's Innodb lock orphaned in the lock wait queue, which in some scenarios can cause temporary node hanging or a crash; this version has a fix for handling the lock wait state of high priority aborted transactions ([MDEV-39681](https://jira.mariadb.org/browse/MDEV-39681))
* Galera metadata conflict locking might not look correct if wsrep\_debug=1 ([MDEV-40538](https://jira.mariadb.org/browse/MDEV-40538))
* Mariadb error 1950 after SST ([MDEV-38147](https://jira.mariadb.org/browse/MDEV-38147))
* Found N prepared transactions after mariabackup SST ([MDEV-40179](https://jira.mariadb.org/browse/MDEV-40179))
* Fix for regression coming from MDEV-34924 , which refactors gtid\_slave\_pos table handling in replication; the fix here is for potential cluster hanging when DDL or Sequence access is replicated to a cluster by async replication ([MDEV-38260](https://jira.mariadb.org/browse/MDEV-38260))

### GIS

* ASAN error on malformed WKB point ([MDEV-39657](https://jira.mariadb.org/browse/MDEV-39657))
* ST\_GeomFromGeoJSON in processing its JSON object did not check the depth of processing and could potentially overrun memory. The depth of 32 is now enforced for MariaDB versions < 12.3, after which the depth is limited by the operating system stack size. ([MDEV-39813](https://jira.mariadb.org/browse/MDEV-39813))
* `ST_GEOMFROMGEOJSON` when passed a JSON object that specified its "type" after all of the other GeoJSON objects that define it would previously return NULL rather than the object, thanks to Akshat Nehra of AWS for providing a solution to this ([MDEV-39981](https://jira.mariadb.org/browse/MDEV-39981))
* ASAN error on malformed WKB multipolygon ([MDEV-40328](https://jira.mariadb.org/browse/MDEV-40328))
* ST\_GeomFromText stack overrun on deeply nested GeometryCollection ([MDEV-40409](https://jira.mariadb.org/browse/MDEV-40409))
* ST\_GeomFromWKB stack overrun on deeply nested GeometryCollection ([MDEV-40540](https://jira.mariadb.org/browse/MDEV-40540))
* A WKB multi-line with an invalid byte order field when passed to in ST\_GeomFromWKB has been corrected to return a NULL result where it previously had a valid value ([MDEV-26813](https://jira.mariadb.org/browse/MDEV-26813))
* Server crash or assertion failure in get\_n\_sincos with nested ST\_BUFFER ([MDEV-31267](https://jira.mariadb.org/browse/MDEV-31267))
* Binary\_string::qs\_append(char): Assertion `str_length + (uint32) (1) <= Alloced_length` failed in AsText ([MDEV-40329](https://jira.mariadb.org/browse/MDEV-40329))
* A WKB multi-point with an invalid byte order field when passed to the function ST\_GeomFromWKB has been corrected to return a NULL result where it previously had a valid value ([MDEV-40552](https://jira.mariadb.org/browse/MDEV-40552))
* ST\_CROSSES always returns 0 for geometries of different dimensions ([MDEV-40584](https://jira.mariadb.org/browse/MDEV-40584))

### Information Schema

* SHOW CREATE TABLE corrupts \`-quoted table options ([MDEV-39776](https://jira.mariadb.org/browse/MDEV-39776))
* Backtick in FK names breaks SHOW CREATE TABLE ([MDEV-39818](https://jira.mariadb.org/browse/MDEV-39818))
* Single quote in DATA DIRECTORY breaks SHOW CREATE TABLE ([MDEV-40159](https://jira.mariadb.org/browse/MDEV-40159))

### JSON

* JSON functions on large input; JSON\_CONTAIN, JSON\_CONTAINS\_PATH, JSON\_EXISTS, JSON\_EXTRACT, and JSON\_KEYS; were previously uninterruptible with KILL query, and could exceed their maximum query time ([MDEV-28404](https://jira.mariadb.org/browse/MDEV-28404))
* JSON\_EXISTS was permitted to exceeded the depth for JSON functions ([MDEV-39276](https://jira.mariadb.org/browse/MDEV-39276))
* JSON\_ARRAYAGG() returns garbage because of off-by-one error ([MDEV-39817](https://jira.mariadb.org/browse/MDEV-39817))
* mysql\_json plugin OOB reads ([MDEV-40678](https://jira.mariadb.org/browse/MDEV-40678))
* On big-endian platforms, the interruption of the execution of JSON functions was previously not possible and this is now corrected; on all platforms the interruption of JSON\_OVERLAPS now returns the correct error code ([MDEV-30518](https://jira.mariadb.org/browse/MDEV-30518))
* The comparison of two JSON objects with JSON\_EQUALS, JSON\_NORMALIZE, or ordering, could result in unpredictable results where there was an object with the same object key listed more than once; the normalization has been made consistent ([MDEV-28922](https://jira.mariadb.org/browse/MDEV-28922))
* When fetching a false value from a JSON function using an SQL cursor, the "false" was truncated to "fals" due to an incorrect width in the protocol ([MDEV-31554](https://jira.mariadb.org/browse/MDEV-31554))
* A range of JSON functions taking a path argument, when passed SQL expressions that don't have a character set, would crash the server ([MDEV-32331](https://jira.mariadb.org/browse/MDEV-32331))
* Unexpected collation when using json\_table ([MDEV-36764](https://jira.mariadb.org/browse/MDEV-36764))
* JSON\_OVERLAPS, JSON\_LENGTH, JSON\_DEPTH, JSON\_EQUALS, JSON\_NORMALIZE didn't response to KILL query or respect the max\_statement time system variable; JSON\_EQUALS and JSON\_NORMALIZE now return warnings on incorrect syntax ([MDEV-40165](https://jira.mariadb.org/browse/MDEV-40165))
* JSON\_VALID wasn't able to be stopped if a large document was passed to it; it also failed to respect the max\_statement\_time; in correcting the error handling of this function there is also an SQL note if the JSON is invalid indicating at what position it is invalid and why ([MDEV-40175](https://jira.mariadb.org/browse/MDEV-40175))
* Server crash in Charset::charset upon JSON operations ([MDEV-40414](https://jira.mariadb.org/browse/MDEV-40414))
* JSON\_SCHEMA\_VALID() was returning incorrect result with JSON having array of objects. ([MDEV-38033](https://jira.mariadb.org/browse/MDEV-38033))
* When selecting the result of JSON\_ARRAY\_INTERSECT from a cursor, result fields were blank due to incorrect setting of the length ([MDEV-39716](https://jira.mariadb.org/browse/MDEV-39716))
* JSON functions added in 11.4 are now interruptible with a KILL QUERY, or exceeding the max\_statement\_time, including JSON\_ARRAY\_INTERSECT, JSON\_OBJECT\_TO\_ARRAY, JSON\_SCHEMA\_VALID; the JSON\_KEY\_VALUE function as a quick function added isn't applicable; all the functions now produce warnings on invalid JSON passed to them ([MDEV-39742](https://jira.mariadb.org/browse/MDEV-39742))

### Locking

* Fixed a server crash during the ALTER TABLE under a LOCK=EXCLUSIVE where there was a NEXTVAL expression in the current table definition ([MDEV-31808](https://jira.mariadb.org/browse/MDEV-31808))

### mariabackup

* mariadb-backup could abort with the misleading error "Was only able to copy log from X to Y, not Z; try increasing innodb\_log\_file\_size" even when the redo log was intact and far from full. The log copier could read a partially written tail block that still parsed with a valid CRC, advancing its parse position into the middle of a mini-transaction, after which it never caught up to the target LSN. The copier now parses the redo log only up to the server's durably flushed LSN (Innodb\_lsn\_flushed), and re-reads those bytes on a later pass ([MDEV-39468](https://jira.mariadb.org/browse/MDEV-39468))
* Missing filename check in mariadb-backup --decompress ([MDEV-39565](https://jira.mariadb.org/browse/MDEV-39565))

### Optimizer

* Name Resolution: Wrong result with grouping select from merged derived table ([MDEV-17846](https://jira.mariadb.org/browse/MDEV-17846))
* NATURAL JOIN operates on a derived table (or view with derived\_merge=off) having more than 64 columns would crash the server with an assertion, bug fixed by Abdelrahman Hedia ([MDEV-24931](https://jira.mariadb.org/browse/MDEV-24931))
* Unexpected bypass of lock, Assertion `(have_max && !have_min) || (have_max && have_min && (max_res == 0))` failed in QUICK\_GROUP\_MIN\_MAX\_SELECT::get\_next ([MDEV-25964](https://jira.mariadb.org/browse/MDEV-25964))
* Assertion `marked_for_read()` failed upon range select with virtual column in index ([MDEV-28610](https://jira.mariadb.org/browse/MDEV-28610))
* Some queries combining recursive CTEs and subqueries might cause a server crash during execution ([MDEV-32326](https://jira.mariadb.org/browse/MDEV-32326))
* Server crashes simplifying group by ([MDEV-35565](https://jira.mariadb.org/browse/MDEV-35565))
* Debug build assertion on incorrectly eliminated subqueries ([MDEV-36610](https://jira.mariadb.org/browse/MDEV-36610))
* Unary negation of LONGTEXT, wrong result under GROUP BY ([MDEV-38210](https://jira.mariadb.org/browse/MDEV-38210))
* Server crashes at Item\_func\_lastval::val\_int and Item\_func\_setval::val\_int with CTE alias ([MDEV-39063](https://jira.mariadb.org/browse/MDEV-39063))
* Logical Bug in `NOT ( ... XOR ... )` Evaluation with Implicit Type Conversion ([MDEV-39363](https://jira.mariadb.org/browse/MDEV-39363))
* Inlined the fast path for the disabled optimizer trace case, trading a function call for a predicted-branch on a hot path ([MDEV-39490](https://jira.mariadb.org/browse/MDEV-39490))
* Crash when pushing "NOT a" condition from HAVING into WHERE ([MDEV-39916](https://jira.mariadb.org/browse/MDEV-39916))
* Under sql\_mode=ONLY\_FULL\_GROUP\_BY when a correlated subquery aggregates a column of an outer query, the server previously incorrectly raised a ER\_WRONG\_FIELD\_WITH\_GROUP error rather than a correct result, bug report and fix thanks to Jaeheon Shim ([MDEV-39932](https://jira.mariadb.org/browse/MDEV-39932))
* 2nd PS exec crash w/nested VIEWs ([MDEV-36059](https://jira.mariadb.org/browse/MDEV-36059))

### Optimizer - Window functions

* Queries with window functions previously could not be killed during the processing of the window function; also the max\_statement\_time statement time for the execution of window functions was ignored; both of these behaviors are corrected ([MDEV-31209](https://jira.mariadb.org/browse/MDEV-31209))
* Floating point exception: division by zero in Item\_sum\_ntile::val\_int ([MDEV-39451](https://jira.mariadb.org/browse/MDEV-39451))

### OTHER

* Fix a memory corruption by safely copying between overlapping memory regions ([MDEV-39450](https://jira.mariadb.org/browse/MDEV-39450))
* Server crash hp\_rec\_key\_cmp ([MDEV-38722](https://jira.mariadb.org/browse/MDEV-38722))

### Packaging

* It was possible for a user with FILE privileges and a secure\_file\_priv system variable configuration that can write to /run/mysqld (enabled by default), to create the environment file /run/mysqld/wsrep-new-cluster that the mariadb service will use on the next restart. ([MDEV-40629](https://jira.mariadb.org/browse/MDEV-40629))
* The stunnel is a dependency of the Galera rsync sst mechanism. Its optional until a TLS configuration is applied for the SST mechanism. Added stunnel as a recommended package for RPMs and Debian packages for MariaDB-server and in 12.3, a required package of MariaDB-server-galera. ([MDEV-40630](https://jira.mariadb.org/browse/MDEV-40630))
* SBOM contained invalid supplier name for libmariadb or libmarias3 ([MDEV-39708](https://jira.mariadb.org/browse/MDEV-39708))

### Parser

* Server crash / assertion failure in Compare\_identifiers::operator upon dropping period with empty name ([MDEV-30297](https://jira.mariadb.org/browse/MDEV-30297))

### Partitioning

* Assertion '0' failed in ha\_partition::handle\_unordered\_next upon HANDLER READ from partitioned table ([MDEV-20195](https://jira.mariadb.org/browse/MDEV-20195))
* Valgrind/MSAN errors in ha\_partition::swap\_blobs() for BLOB not in secondary index ([MDEV-27569](https://jira.mariadb.org/browse/MDEV-27569))
* Using Query Cache (not default) with a "ALTER TABLE tbl CONVERT TABLE normal\_table TO partition\_definition" query, there was query cache invalidation of "normal\_table" that accessed freed memory, potentially resulting undefined behaviour ([MDEV-33170](https://jira.mariadb.org/browse/MDEV-33170))
* Partitioned tables now are named correctly on case insensitive filesystems have have predictable results when renaming and altering them ([MDEV-37739](https://jira.mariadb.org/browse/MDEV-37739))
* InnoDB partitioned system version tables could crash during an InnoDB purge if the table wasn't already open attempting to resolve the ROW\_START/ROW\_END columns ([MDEV-40237](https://jira.mariadb.org/browse/MDEV-40237))

### Platform Windows

* Deleting from Aria table could result in a corrupt index on Windows ([MDEV-37000](https://jira.mariadb.org/browse/MDEV-37000))
* my\_sync() fails to use NtFlushBuffersFileEx() ([MDEV-40001](https://jira.mariadb.org/browse/MDEV-40001))

### Plugin - Audit

* Server could crash if server\_audit plugin is uninstalled and reinstalled again ([MDEV-34074](https://jira.mariadb.org/browse/MDEV-34074))

### Plugin - File Key Management

* The file\_key\_management plugin can crash if the key file is empty ([MDEV-40658](https://jira.mariadb.org/browse/MDEV-40658))

### Plugin - Hashicorp Key Management

* Hashicorp Key Management plugin improved performance by avoiding calling expensive time retrieval functions ([MDEV-37187](https://jira.mariadb.org/browse/MDEV-37187))

### Plugins

* MariaDB cannot open page-compressed InnoDB tables at startup if innodb\_compression\_algorithm other than zlib is specified ([MDEV-36147](https://jira.mariadb.org/browse/MDEV-36147))
* Check that plugin name is pure ASCII ([MDEV-39245](https://jira.mariadb.org/browse/MDEV-39245))
* handlersocket crashes on read with huge number of fields ([MDEV-40425](https://jira.mariadb.org/browse/MDEV-40425))

### Prepared Statements

* Assertion failure in Diagnostics\_area::set\_error\_status / Reprepare\_observer::report\_error ([MDEV-38472](https://jira.mariadb.org/browse/MDEV-38472))

### Protocol

* Proxy protocol connections from remote host leaked memory, if DNS name resolution is allowed (skip\_name\_resolve is not set) ([MDEV-37556](https://jira.mariadb.org/browse/MDEV-37556))
* One-byte OOB write in PROXY protocol v1 header parser ([MDEV-39564](https://jira.mariadb.org/browse/MDEV-39564))
* PROXY v2 protocol uninitialized memory reads ([MDEV-39576](https://jira.mariadb.org/browse/MDEV-39576))

### Query Cache

* qc\_info OOB read if query contains \0 ([MDEV-40670](https://jira.mariadb.org/browse/MDEV-40670))

### Replication

* Fixed multiple out-of-bounds memory reads when parsing corrupted or truncated Table\_map\_log\_event metadata, so a slave or mariadb-binlog --print-table-metadata now handle malformed table map events safely instead of crashing or leaking heap memory; thanks to Luke Lu of AWS for providing this fix ([MDEV-39689](https://jira.mariadb.org/browse/MDEV-39689))
* Running SHOW SLAVE STATUS (or SHOW ALL SLAVES STATUS) at the same moment a STOP SLAVE stopped the SQL thread could crash the server; the statement's read of the SQL thread's state was only synchronized with the IO thread's shutdown, so a stopping SQL thread could free that state while it was being read; the read is now synchronized with SQL thread shutdown, and the crash no longer occurs ([MDEV-40298](https://jira.mariadb.org/browse/MDEV-40298))
* Replication slave is stuck without any error ([MDEV-34135](https://jira.mariadb.org/browse/MDEV-34135))
* Fix memory disclosure (if not a crash) with v2 Rows Events with truncated extra data ([MDEV-39485](https://jira.mariadb.org/browse/MDEV-39485))
* A replica could crash when replicating compressed events (log\_bin\_compress) if an event's recorded uncompressed size was corrupted to a very large value; the replica sized its decompression workspace from that value without checking it, and the resulting mismatch corrupted the replica's memory or led it to request a 4GB allocation; the replica now rejects any uncompressed size larger than the largest packet a master can produce and stops its IO thread with a descriptive error ([MDEV-39762](https://jira.mariadb.org/browse/MDEV-39762))
* Fix crash on Format Description event with incomplete contents ([MDEV-40365](https://jira.mariadb.org/browse/MDEV-40365))
* Fix crash on Format Description event with incomplete contents ([MDEV-40366](https://jira.mariadb.org/browse/MDEV-40366))
* A replica could crash on connecting to a master whose binlog\_checksum setting differs from the setting in effect when the replica's relay log was written, if the master's binary log file name was longer than a file name may legally be; the replica did not check the length of the file name the master reported before storing it, so an overlong name corrupted the replica's memory; the replica now rejects the over-sized name and stops its IO thread with an error, instead of crashing ([MDEV-40492](https://jira.mariadb.org/browse/MDEV-40492))
* `mariadb-binlog --force-read` now consistently displays the checksum for Unknown events to match “known” events ([MDEV-40542](https://jira.mariadb.org/browse/MDEV-40542))
* Fix memory leak for incorrect checksums in `mariadb-binlog --verify-binlog-checksum --force-read` ([MDEV-40544](https://jira.mariadb.org/browse/MDEV-40544))
* A replica could crash when a heartbeat or other event from its master arrived truncated, which can happen when the replication stream is corrupted in transit; the replica trusted the size the truncated event declared and tried to read and allocate far more data than the event held, in some builds nearly 4GB; such an event now stops the replica's IO thread with an error identifying the bad event length ([MDEV-40643](https://jira.mariadb.org/browse/MDEV-40643))
* A replica could crash when its master sent a row event carrying a database or table name longer than MariaDB allows an identifier to be, which indicates a corrupted or forged event; the replica copied the name into storage sized for a legal identifier without checking the length it was given; such an event now stops the replica's SQL thread with a replication error instead of crashing the replica ([MDEV-40644](https://jira.mariadb.org/browse/MDEV-40644))
* Slave Crash on Malformed User\_var\_log\_event ([MDEV-40645](https://jira.mariadb.org/browse/MDEV-40645))
* A replica could crash, or copy unrelated memory into its own record of a replicated table's structure, when a row event described more columns than its accompanying column information covered; the replica accepted the event based on a size check too weak to catch the shortfall, then read column information the event did not contain; the replica now verifies that the event carries column information for every column it declares, and stops the SQL thread with a replication error when it does not ([MDEV-40646](https://jira.mariadb.org/browse/MDEV-40646))
* Fix crash in Rotate event when followed by a Format Description event describing no Rotate event support ([MDEV-40647](https://jira.mariadb.org/browse/MDEV-40647))
* A master could cause a replica to apply the same statement twice and end up with data the master's binary log never contained, by sending an event whose declared size disagrees with the amount of data actually sent; the replica stored such an event in its relay log as received, and a hidden second event in the surplus bytes was later applied as though the master had sent it; the replica now compares the two sizes on arrival, so a mismatched event stops the IO thread with an error and never reaches the relay log; this closes a gap that made a replica's data unverifiable against its master's binary log ([MDEV-40648](https://jira.mariadb.org/browse/MDEV-40648))
* Assertion `marked_for_read()` fails on slave upon RBR with unique blobs and binlog\_row\_image=MINIMAL #3 ([MDEV-40057](https://jira.mariadb.org/browse/MDEV-40057))

### Scripts & Clients

* mysqld\_multi starts same instance multiple times with the risk to crash database ([MDEV-26910](https://jira.mariadb.org/browse/MDEV-26910))
* Provide fallback message logging function when they are not present ([MDEV-38075](https://jira.mariadb.org/browse/MDEV-38075))
* Bundled command-line clients don't always enforce length limits on server results ([MDEV-40065](https://jira.mariadb.org/browse/MDEV-40065))
* mariadb-dump doesn't always quote identifiers ([MDEV-40311](https://jira.mariadb.org/browse/MDEV-40311))
* The mariadb client was using `.mariadb_histor` (without the trailing 'y') as the storage name for command line history ([MDEV-40313](https://jira.mariadb.org/browse/MDEV-40313))
* When failing to invoke MariaDB Server, the program generate\_option\_list could crash instead of exiting with a failure status ([MDEV-39971](https://jira.mariadb.org/browse/MDEV-39971))
* SHOW CREATE SERVER incorrect quoting ([MDEV-40312](https://jira.mariadb.org/browse/MDEV-40312))
* mariadb-import --lock-tables crashes ([MDEV-40340](https://jira.mariadb.org/browse/MDEV-40340))

### Server

* group\_concat ignores max\_allowed\_packet ([MDEV-39673](https://jira.mariadb.org/browse/MDEV-39673))
* \#mysql50# mixes up with table names in the table cache and on disk ([MDEV-40362](https://jira.mariadb.org/browse/MDEV-40362))
* Insufficient validation of frm data when opening a table ([MDEV-40571](https://jira.mariadb.org/browse/MDEV-40571))
* ASAN errors in err\_conv / field\_unpack upon multi-UPDATE causing ER\_DUP\_ENTRY ([MDEV-25813](https://jira.mariadb.org/browse/MDEV-25813))
* Success logon with proxy protocol did not reset connect error count ([MDEV-25817](https://jira.mariadb.org/browse/MDEV-25817))
* Valgrind/MSAN errors in Item\_func\_des\_encrypt::val\_str ([MDEV-27561](https://jira.mariadb.org/browse/MDEV-27561))
* Server crash / ASAN use-after-poison in Binary\_string::free\_buffer / Item\_func\_sformat::\~Item\_func\_sformat ([MDEV-31024](https://jira.mariadb.org/browse/MDEV-31024))
* Cannot modify a column if there is a generated column before it and a foreign key ([MDEV-35630](https://jira.mariadb.org/browse/MDEV-35630))
* Assertion `decimals == 0` failed Item\_func\_mod::fix\_length\_and\_dec\_int ([MDEV-35920](https://jira.mariadb.org/browse/MDEV-35920))
* Item\_name\_const forwarded type\_handler() to the wrapped value but not decimal\_precision(), so a hex literal wrapped in NAME\_CONST reported the generic precision instead of its own, forward decimal\_precision() too ([MDEV-38061](https://jira.mariadb.org/browse/MDEV-38061))
* Fix crash and ASAN/UBSAN errors caused by temporal functions( LAST\_DAY , CAST) passing incorrect interval flags when nested under EXTRACT with ZERO\_DATE\_TIME\_CAST ([MDEV-38971](https://jira.mariadb.org/browse/MDEV-38971))
* Under --bootstrap mode, used in mariadb-install-db, an unwanted delay was removed and it now calls the plugin clean up functions ([MDEV-39585](https://jira.mariadb.org/browse/MDEV-39585))
* The error log associated when libaio failed to setup an asynchronous kernel interface was incorrect; it now reports the error code, a text version, and a reference to the manual page that shows a correction; fix thanks to Andreas Schwab ([MDEV-39925](https://jira.mariadb.org/browse/MDEV-39925))
* Fix MSAN warnings in `REPLACE DELAYED` with system versioned tables ([MDEV-40099](https://jira.mariadb.org/browse/MDEV-40099))
* use-of-uninitialized-value in `THD::print_aborted_warning(unsigned int, char const*)` ([MDEV-40103](https://jira.mariadb.org/browse/MDEV-40103))
* a CMP0218 warning with cmake 4.4 ([MDEV-40391](https://jira.mariadb.org/browse/MDEV-40391))
* SFORMAT ignores max\_allowed\_packet ([MDEV-40411](https://jira.mariadb.org/browse/MDEV-40411))
* Server fails to drop .ibd file when vector table creation fails ([MDEV-38842](https://jira.mariadb.org/browse/MDEV-38842))

### Stored routines

* Service crashed on procedure call ([MDEV-37086](https://jira.mariadb.org/browse/MDEV-37086))
* Abnormal server termination on second execution of stored routine that runs a cursor after table metadata in the query was changed ([MDEV-36481](https://jira.mariadb.org/browse/MDEV-36481))
* ASAN heap-use-after-free in Query\_arena::free\_items/sp\_lex\_cursor::\~sp\_lex\_cursor ([MDEV-38561](https://jira.mariadb.org/browse/MDEV-38561))
* Server crashes in sp\_head::register\_instr\_mem\_root\_for\_deallocation upon shutdown ([MDEV-40004](https://jira.mariadb.org/browse/MDEV-40004))

### Tests, MTR

* perfschema.dml\_threads failed in buildbot with wrong errno ([MDEV-17746](https://jira.mariadb.org/browse/MDEV-17746))
* The test case main.lotofstack failed under ASAN and UBSAN conditions; fix thanks to Mohd Jarir Khan ([MDEV-37664](https://jira.mariadb.org/browse/MDEV-37664))
* The test case for plugins.feedback\_os\_release incorrectly failed based on /etc/os-release contents; fix thanks to Tomáš Mózes ([MDEV-39784](https://jira.mariadb.org/browse/MDEV-39784))
* The test case main.socket\_conflict was producing an incorrect result when run as the root user; bug report and fix thanks to Fariha Shaikh of AWS ([MDEV-39931](https://jira.mariadb.org/browse/MDEV-39931))

### Triggers

* On the successful {{LOAD DATA LOCAL INFILE}} path, a {{BEFORE INSERT}} trigger can change a base column while a {{STORED}} generated column retains the value computed before that trigger change. The persisted row therefore violates its own generated-column expression. ([MDEV-40480](https://jira.mariadb.org/browse/MDEV-40480))

### Variables

* ASAN crash on invalid proxy\_protocol\_networks value ([MDEV-39658](https://jira.mariadb.org/browse/MDEV-39658))

## Vector search

* Reloading COSINE metric index from disk degrades search recall due to abs2 quantization noise ([MDEV-39858](https://jira.mariadb.org/browse/MDEV-39858))
* ER\_TOO\_BIG\_FIELDLENGTH or assertion failure upon creating vector from blob ([MDEV-40486](https://jira.mariadb.org/browse/MDEV-40486))

### Versioned Tables

* Assertion `table->vers_write` fails upon ODKU into table with versioned column ([MDEV-38854](https://jira.mariadb.org/browse/MDEV-38854))

### Views

* Views now escape user names in the view frm file; old views where the definer name included a backslash will need to be recreated ([MDEV-40484](https://jira.mariadb.org/browse/MDEV-40484))

### Virtual Columns

* Assertion `marked_for_read()` failed upon SELECT with VALUE(virtual column) ([MDEV-26820](https://jira.mariadb.org/browse/MDEV-26820))
* Assertion `marked_for_read()` failed in virtual my\_time\_t Field\_timestamp0::get\_timestamp(const uchar\*, ulong\*) const ([MDEV-34992](https://jira.mariadb.org/browse/MDEV-34992))

### XML Functions

* ExtractValue does not control recursion depth ([MDEV-39750](https://jira.mariadb.org/browse/MDEV-39750))

## Changelog

For a complete list of changes made in MariaDB 12.3.3, with links to detailed information on each push, see the [changelog](/docs/release-notes/community-server/changelogs/12.3/12.3.3.md).

***

{% hint style="info" %}
Be notified of new MariaDB Server releases automatically by [subscribing](https://lists.mariadb.org/postorius/lists/announce.lists.mariadb.org/) to the MariaDB Foundation community announce 'at' lists.mariadb.org announcement list (this is a low traffic, announce-only list). MariaDB plc customers will be notified for all new releases, security issues and critical bug fixes for all MariaDB plc products thanks to the Notification Services.

MariaDB may already be included in your favorite OS distribution. More information can be found on the [Distributions which Include MariaDB](/docs/general-resources/distributions-including-mariadb.md) page.
{% endhint %}

<sub>*This page is licensed: CC BY-SA / Gnu FDL*</sub>

{% @marketo/form formid="4316" formId="4316" %}
