mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Bug#59149 valgrind warnings with "like .. escape .." function
Problem: when processing a query like: SELECT '' LIKE '1' ESCAPE COUNT(1); escape_item->val_str() was never executed and the "escape" class member stayed initialized, which led to valgrind uninitialized memory error. Note, a query with some tables in "FROM" clause returns ER_WRONG_ARGUMENTS in the same situation: SELECT '' LIKE '1' ESCAPE COUNT(1) FROM t1; ERROR 1210 (HY000): Incorrect arguments to ESCAPE Fix: disallowing using aggregate functions in ESCAPE clause, even if there are no tables used. There is no much use of that anyway.
This commit is contained in:
@ -182,4 +182,9 @@ INSERT INTO t2 VALUES (1), (2), (3);
|
|||||||
SELECT 1 FROM t2 JOIN t1 ON 1 LIKE a GROUP BY a;
|
SELECT 1 FROM t2 JOIN t1 ON 1 LIKE a GROUP BY a;
|
||||||
1
|
1
|
||||||
DROP TABLE t1, t2;
|
DROP TABLE t1, t2;
|
||||||
|
#
|
||||||
|
# Bug#59149 valgrind warnings with "like .. escape .." function
|
||||||
|
#
|
||||||
|
SELECT '' LIKE '1' ESCAPE COUNT(1);
|
||||||
|
ERROR HY000: Incorrect arguments to ESCAPE
|
||||||
End of 5.1 tests
|
End of 5.1 tests
|
||||||
|
@ -126,5 +126,10 @@ INSERT INTO t2 VALUES (1), (2), (3);
|
|||||||
SELECT 1 FROM t2 JOIN t1 ON 1 LIKE a GROUP BY a;
|
SELECT 1 FROM t2 JOIN t1 ON 1 LIKE a GROUP BY a;
|
||||||
DROP TABLE t1, t2;
|
DROP TABLE t1, t2;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Bug#59149 valgrind warnings with "like .. escape .." function
|
||||||
|
--echo #
|
||||||
|
--error ER_WRONG_ARGUMENTS
|
||||||
|
SELECT '' LIKE '1' ESCAPE COUNT(1);
|
||||||
|
|
||||||
--echo End of 5.1 tests
|
--echo End of 5.1 tests
|
||||||
|
@ -339,6 +339,7 @@ public:
|
|||||||
forced_const= TRUE;
|
forced_const= TRUE;
|
||||||
}
|
}
|
||||||
virtual bool const_item() const { return forced_const; }
|
virtual bool const_item() const { return forced_const; }
|
||||||
|
virtual bool const_during_execution() const { return false; }
|
||||||
virtual void print(String *str, enum_query_type query_type);
|
virtual void print(String *str, enum_query_type query_type);
|
||||||
void fix_num_length_and_dec();
|
void fix_num_length_and_dec();
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user