mirror of
https://github.com/MariaDB/server.git
synced 2025-12-24 11:21:21 +03:00
Fixed bug #36488: regexp returns false matches, concatenating
with previous rows.
The WHERE clause containing expression:
CONCAT(empty_field1, empty_field2, ..., 'literal constant', ...)
REGEXP 'regular expression'
may return wrong matches.
Optimization of the CONCAT function has been fixed.
mysql-test/r/func_concat.result:
Added test case for bug #36488.
mysql-test/t/func_concat.test:
Added test case for bug #36488.
sql/item_strfunc.cc:
Fixed bug #36488.
The Item_func_concat::val_str method is optimized to
use first non-empty argument of the CONCAT function for in-place
result accumulation. This optimization is acceptable if that
first argument is not a constant.
However, current implementation checks this condition only for
the first actual argument of the CONCAT function.
So, the Item_func_concat::val_str method can corrupt values
of, for example, literal strings by appending random data.
The Item_func_concat::val_str method has been modified to take
into account the ability to be modified in-place for the first
non-empty argument.
This commit is contained in:
@@ -82,3 +82,10 @@ a
|
||||
1234562
|
||||
x
|
||||
drop table t1;
|
||||
CREATE TABLE t1 (c1 varchar(100), c2 varchar(100));
|
||||
INSERT INTO t1 VALUES ('',''), ('','First'), ('Random','Random');
|
||||
SELECT * FROM t1 WHERE CONCAT(c1,' ',c2) REGEXP 'First.*';
|
||||
c1 c2
|
||||
First
|
||||
DROP TABLE t1;
|
||||
# End of 5.0 tests
|
||||
|
||||
Reference in New Issue
Block a user