Broken SQL CONCAT function behaviour in 5.7.30-0ubuntu0.18.04.1
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
mysql-5.7 (Ubuntu) |
Invalid
|
High
|
Unassigned | ||
Xenial |
Won't Fix
|
High
|
Unassigned | ||
Bionic |
Fix Released
|
High
|
Unassigned | ||
Eoan |
Invalid
|
Undecided
|
Unassigned | ||
Focal |
Invalid
|
Undecided
|
Unassigned | ||
mysql-8.0 (Ubuntu) |
Invalid
|
High
|
Unassigned | ||
Xenial |
Invalid
|
Undecided
|
Unassigned | ||
Bionic |
Invalid
|
Undecided
|
Unassigned | ||
Eoan |
Won't Fix
|
High
|
Unassigned | ||
Focal |
Fix Released
|
High
|
Unassigned |
Bug Description
[Impact]
This is a regression in MySQL 5.7.30 (does not affect 8.0 which is in focal and development release, nor 5.7.29). The CONCAT function has inconsistent behavior depending on whether or not the result is assigned to a variable, which is leading to a crash in slurmdbd.
Since it's limited to 5.7.30, the bug only affects stable releases Bionic and Xenial.
[Test Case]
- Start up MySQL Server 5.7.30
- Connect to it with the mysql cli (with default install of the server, "sudo mysql" will connect to the MySQL root user)
- Run the following two queries:
* SELECT CONCAT('');
* SET @var = ""; SELECT @var := CONCAT('');
They should give the same output, but the second one returns NULL instead of an empty string when using 5.7.30.
[Regression Potential]
The patch changes fairly low-level code, which can always carry some risk.
[Other info]
This bug is fixed in the next upstream release of MySQL (5.7.31), so the patch would only be needed until that is picked.
--- ORIGINAL DESCRIPTION ---
Hi,
Yesterday we upgraded from 5.7.29-
Upon inspection, the slurmdbd crash is caused by a change of behaviour of the SQL CONCAT function. The new behaviour seems wrong.
Calling
SELECT CONCAT('');
will result in an empty string as expected however if the result is assigned to a variable with:
SET @var = ""; SELECT @var := CONCAT('');
the variable will be NULL instead of an empty string.
It seems that when the output of CONCAT is assigned to a variable; if CONCAT should have returned an empty string, it will set the variable to NULL instead.
SLURM itself crashes because it uses a stored procedure which relies on the output of CONCAT to be an empty string rather than a NULL variable and tries to dereference the pointer.
I wasn’t able to get hold of 5.7.29-
I think that the behaviour was introduced in the 5.7 branch by this commit:
https:/
but I am not entirely sure.
This bug is a bit annoying because it makes SLURM with accounting enabled completely unusable. However downgrading MySQL to 5.7.29-
I have attached a log file with examples to reproduce the bug.
Thank you very much.
tags: | added: regression-update |
Changed in mysql-5.7 (Ubuntu): | |
status: | Confirmed → Triaged |
importance: | Undecided → High |
Changed in mysql-8.0 (Ubuntu): | |
status: | New → Triaged |
description: | updated |
description: | updated |
Changed in mysql-5.7 (Ubuntu Bionic): | |
status: | Triaged → Fix Released |
Changed in mysql-8.0 (Ubuntu Focal): | |
status: | Triaged → Fix Released |
Changed in mysql-5.7 (Ubuntu): | |
status: | Triaged → Invalid |
Changed in mysql-8.0 (Ubuntu): | |
status: | Triaged → Invalid |
I am also attaching the SLURM stored procedure which triggers the bug. It’s obviously a bit more complicated than my minimal example :-)