mirror of
https://github.com/MariaDB/server.git
synced 2026-05-15 03:17:20 +02:00
Fix for bug#49897: crash in ptr_compare when char(0) NOT NULL
column is used for ORDER BY
Problem: filesort isn't meant for null length sort data
(e.g. char(0)), that leads to a server crash.
Fix: disregard sort order if sort data record length is 0 (nothing
to sort).
mysql-test/r/select.result:
Fix for bug#49897: crash in ptr_compare when char(0) NOT NULL
column is used for ORDER BY
- test result.
mysql-test/t/select.test:
Fix for bug#49897: crash in ptr_compare when char(0) NOT NULL
column is used for ORDER BY
- test case.
sql/filesort.cc:
Fix for bug#49897: crash in ptr_compare when char(0) NOT NULL
column is used for ORDER BY
- assert added as filesort cannot handle null length sort data.
sql/sql_select.cc:
Fix for bug#49897: crash in ptr_compare when char(0) NOT NULL
column is used for ORDER BY
- don't sort null length data e.g. in case of ORDER BY CHAR(0).
This commit is contained in:
parent
b13ed2975d
commit
172af3722e
4 changed files with 119 additions and 0 deletions
|
|
@ -4540,4 +4540,68 @@ id select_type table type possible_keys key key_len ref rows Extra
|
|||
1 SIMPLE z system NULL NULL NULL NULL 1
|
||||
Warnings:
|
||||
Note 1003 select '2001-01-01 00:00:00' AS `a`,'2001-01-01 00:00:00' AS `a`,'2001-01-01 00:00:00' AS `a` from `test`.`t1` `x` join `test`.`t1` `y` join `test`.`t1` `z` where 1
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# Bug #49897: crash in ptr_compare when char(0) NOT NULL
|
||||
# column is used for ORDER BY
|
||||
#
|
||||
SET @old_sort_buffer_size= @@session.sort_buffer_size;
|
||||
SET @@sort_buffer_size= 40000;
|
||||
CREATE TABLE t1(a CHAR(0) NOT NULL);
|
||||
INSERT INTO t1 VALUES (0), (0), (0);
|
||||
INSERT INTO t1 SELECT t11.a FROM t1 t11, t1 t12;
|
||||
INSERT INTO t1 SELECT t11.a FROM t1 t11, t1 t12;
|
||||
INSERT INTO t1 SELECT t11.a FROM t1 t11, t1 t12;
|
||||
EXPLAIN SELECT a FROM t1 ORDER BY a;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 24492
|
||||
SELECT a FROM t1 ORDER BY a;
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1(a CHAR(0) NOT NULL, b CHAR(0) NOT NULL, c int);
|
||||
INSERT INTO t1 VALUES (0, 0, 0), (0, 0, 2), (0, 0, 1);
|
||||
INSERT INTO t1 SELECT t11.a, t11.b, t11.c FROM t1 t11, t1 t12;
|
||||
INSERT INTO t1 SELECT t11.a, t11.b, t11.c FROM t1 t11, t1 t12;
|
||||
INSERT INTO t1 SELECT t11.a, t11.b, t11.c FROM t1 t11, t1 t12;
|
||||
EXPLAIN SELECT a FROM t1 ORDER BY a LIMIT 5;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 24492
|
||||
SELECT a FROM t1 ORDER BY a LIMIT 5;
|
||||
a
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
EXPLAIN SELECT * FROM t1 ORDER BY a, b LIMIT 5;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 24492
|
||||
SELECT * FROM t1 ORDER BY a, b LIMIT 5;
|
||||
a b c
|
||||
0
|
||||
2
|
||||
1
|
||||
0
|
||||
2
|
||||
EXPLAIN SELECT * FROM t1 ORDER BY a, b, c LIMIT 5;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 24492 Using filesort
|
||||
SELECT * FROM t1 ORDER BY a, b, c LIMIT 5;
|
||||
a b c
|
||||
0
|
||||
0
|
||||
0
|
||||
0
|
||||
0
|
||||
EXPLAIN SELECT * FROM t1 ORDER BY c, a LIMIT 5;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 24492 Using filesort
|
||||
SELECT * FROM t1 ORDER BY c, a LIMIT 5;
|
||||
a b c
|
||||
0
|
||||
0
|
||||
0
|
||||
0
|
||||
0
|
||||
SET @@sort_buffer_size= @old_sort_buffer_size;
|
||||
DROP TABLE t1;
|
||||
End of 5.0 tests
|
||||
|
|
|
|||
|
|
@ -3844,6 +3844,46 @@ EXPLAIN EXTENDED SELECT x.a, y.a, z.a FROM t1 x
|
|||
JOIN t1 y ON x.a=y.a
|
||||
JOIN t1 z ON y.a=z.a
|
||||
WHERE x.a='2001-01-01' AND z.a='2001-01-01 00:00:00';
|
||||
DROP TABLE t1;
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # Bug #49897: crash in ptr_compare when char(0) NOT NULL
|
||||
--echo # column is used for ORDER BY
|
||||
--echo #
|
||||
SET @old_sort_buffer_size= @@session.sort_buffer_size;
|
||||
SET @@sort_buffer_size= 40000;
|
||||
|
||||
CREATE TABLE t1(a CHAR(0) NOT NULL);
|
||||
--disable_warnings
|
||||
INSERT INTO t1 VALUES (0), (0), (0);
|
||||
--enable_warnings
|
||||
INSERT INTO t1 SELECT t11.a FROM t1 t11, t1 t12;
|
||||
INSERT INTO t1 SELECT t11.a FROM t1 t11, t1 t12;
|
||||
INSERT INTO t1 SELECT t11.a FROM t1 t11, t1 t12;
|
||||
EXPLAIN SELECT a FROM t1 ORDER BY a;
|
||||
--disable_result_log
|
||||
SELECT a FROM t1 ORDER BY a;
|
||||
--enable_result_log
|
||||
DROP TABLE t1;
|
||||
|
||||
CREATE TABLE t1(a CHAR(0) NOT NULL, b CHAR(0) NOT NULL, c int);
|
||||
--disable_warnings
|
||||
INSERT INTO t1 VALUES (0, 0, 0), (0, 0, 2), (0, 0, 1);
|
||||
--enable_warnings
|
||||
INSERT INTO t1 SELECT t11.a, t11.b, t11.c FROM t1 t11, t1 t12;
|
||||
INSERT INTO t1 SELECT t11.a, t11.b, t11.c FROM t1 t11, t1 t12;
|
||||
INSERT INTO t1 SELECT t11.a, t11.b, t11.c FROM t1 t11, t1 t12;
|
||||
EXPLAIN SELECT a FROM t1 ORDER BY a LIMIT 5;
|
||||
SELECT a FROM t1 ORDER BY a LIMIT 5;
|
||||
EXPLAIN SELECT * FROM t1 ORDER BY a, b LIMIT 5;
|
||||
SELECT * FROM t1 ORDER BY a, b LIMIT 5;
|
||||
EXPLAIN SELECT * FROM t1 ORDER BY a, b, c LIMIT 5;
|
||||
SELECT * FROM t1 ORDER BY a, b, c LIMIT 5;
|
||||
EXPLAIN SELECT * FROM t1 ORDER BY c, a LIMIT 5;
|
||||
SELECT * FROM t1 ORDER BY c, a LIMIT 5;
|
||||
|
||||
SET @@sort_buffer_size= @old_sort_buffer_size;
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo End of 5.0 tests
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue