mirror of
				https://github.com/MariaDB/server.git
				synced 2025-11-03 14:33:32 +03:00 
			
		
		
		
	Bug#35658 (An empty binary value leads to mysqld crash) Before this fix, the following token b'' caused the parser to crash when reading the binary value from the empty string. The crash was caused by: ptr+= max_length - 1; because max_length is unsigned and was 0, causing an overflow. With this fix, an empty binary literal b'' is parsed as a binary value 0, in Item_bin_string.
		
			
				
	
	
		
			129 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			129 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
drop table if exists t1;
 | 
						|
select 0x41,0x41+0,0x41 | 0x7fffffffffffffff | 0,0xffffffffffffffff | 0 ;
 | 
						|
0x41	0x41+0	0x41 | 0x7fffffffffffffff | 0	0xffffffffffffffff | 0
 | 
						|
A	65	9223372036854775807	18446744073709551615
 | 
						|
select 0x31+1,concat(0x31)+1,-0xf;
 | 
						|
0x31+1	concat(0x31)+1	-0xf
 | 
						|
50	2	-15
 | 
						|
select x'31',X'ffff'+0;
 | 
						|
x'31'	X'ffff'+0
 | 
						|
1	65535
 | 
						|
create table t1 (ID int(8) unsigned zerofill not null auto_increment,UNIQ bigint(21) unsigned zerofill not null,primary key (ID),unique (UNIQ) );
 | 
						|
insert into t1 set UNIQ=0x38afba1d73e6a18a;
 | 
						|
insert into t1 set UNIQ=123;
 | 
						|
explain extended select * from t1 where UNIQ=0x38afba1d73e6a18a;
 | 
						|
id	select_type	table	type	possible_keys	key	key_len	ref	rows	filtered	Extra
 | 
						|
1	SIMPLE	t1	const	UNIQ	UNIQ	8	const	1	100.00	
 | 
						|
Warnings:
 | 
						|
Note	1003	select '00000001' AS `ID`,'004084688022709641610' AS `UNIQ` from `test`.`t1` where 1
 | 
						|
drop table t1;
 | 
						|
select x'hello';
 | 
						|
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'x'hello'' at line 1
 | 
						|
select 0xfg;
 | 
						|
ERROR 42S22: Unknown column '0xfg' in 'field list'
 | 
						|
create table t1 select 1 as x, 2 as xx;
 | 
						|
select x,xx from t1;
 | 
						|
x	xx
 | 
						|
1	2
 | 
						|
drop table t1;
 | 
						|
show create table t1;
 | 
						|
Table	Create Table
 | 
						|
t1	CREATE TABLE `t1` (
 | 
						|
  `a` varbinary(255) DEFAULT NULL,
 | 
						|
  `b` varchar(255) DEFAULT NULL
 | 
						|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
 | 
						|
select length(a), length(b) from t1;
 | 
						|
length(a)	length(b)
 | 
						|
255	3
 | 
						|
255	3
 | 
						|
CHECK TABLE t1 FOR UPGRADE;
 | 
						|
Table	Op	Msg_type	Msg_text
 | 
						|
test.t1	check	error	Table upgrade required. Please do "REPAIR TABLE `t1`" to fix it!
 | 
						|
REPAIR TABLE t1;
 | 
						|
Table	Op	Msg_type	Msg_text
 | 
						|
test.t1	repair	status	OK
 | 
						|
show create table t1;
 | 
						|
Table	Create Table
 | 
						|
t1	CREATE TABLE `t1` (
 | 
						|
  `a` varbinary(255) DEFAULT NULL,
 | 
						|
  `b` varchar(255) DEFAULT NULL
 | 
						|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
 | 
						|
select length(a), length(b) from t1;
 | 
						|
length(a)	length(b)
 | 
						|
3	3
 | 
						|
3	3
 | 
						|
insert into t1 values("ccc", "ddd");
 | 
						|
select length(a), length(b) from t1;
 | 
						|
length(a)	length(b)
 | 
						|
3	3
 | 
						|
3	3
 | 
						|
3	3
 | 
						|
select hex(a), hex(b) from t1;
 | 
						|
hex(a)	hex(b)
 | 
						|
616161	636363
 | 
						|
626262	646464
 | 
						|
636363	646464
 | 
						|
select concat("'", a, "'"), concat("'", b, "'") from t1;
 | 
						|
concat("'", a, "'")	concat("'", b, "'")
 | 
						|
'aaa'	'ccc'
 | 
						|
'bbb'	'ddd'
 | 
						|
'ccc'	'ddd'
 | 
						|
drop table t1;
 | 
						|
create table t1(a varbinary(255));
 | 
						|
insert into t1 values("aaa   ");
 | 
						|
select length(a) from t1;
 | 
						|
length(a)
 | 
						|
6
 | 
						|
alter table t1 modify a varchar(255);
 | 
						|
select length(a) from t1;
 | 
						|
length(a)
 | 
						|
6
 | 
						|
drop table t1;
 | 
						|
drop table if exists table_28127_a;
 | 
						|
drop table if exists table_28127_b;
 | 
						|
create table table_28127_a(0b02 int);
 | 
						|
show create table table_28127_a;
 | 
						|
Table	Create Table
 | 
						|
table_28127_a	CREATE TABLE `table_28127_a` (
 | 
						|
  `0b02` int(11) DEFAULT NULL
 | 
						|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
 | 
						|
create table table_28127_b(0b2 int);
 | 
						|
show create table table_28127_b;
 | 
						|
Table	Create Table
 | 
						|
table_28127_b	CREATE TABLE `table_28127_b` (
 | 
						|
  `0b2` int(11) DEFAULT NULL
 | 
						|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
 | 
						|
drop table table_28127_a;
 | 
						|
drop table table_28127_b;
 | 
						|
select 0b01000001;
 | 
						|
0b01000001
 | 
						|
A
 | 
						|
select 0x41;
 | 
						|
0x41
 | 
						|
A
 | 
						|
select b'01000001';
 | 
						|
b'01000001'
 | 
						|
A
 | 
						|
select x'41', 0+x'41';
 | 
						|
x'41'	0+x'41'
 | 
						|
A	65
 | 
						|
select N'abc', length(N'abc');
 | 
						|
abc	length(N'abc')
 | 
						|
abc	3
 | 
						|
select N'', length(N'');
 | 
						|
	length(N'')
 | 
						|
	0
 | 
						|
select '', length('');
 | 
						|
	length('')
 | 
						|
	0
 | 
						|
select b'', 0+b'';
 | 
						|
b''	0+b''
 | 
						|
	0
 | 
						|
select x'', 0+x'';
 | 
						|
x''	0+x''
 | 
						|
	0
 | 
						|
select 0x;
 | 
						|
ERROR 42S22: Unknown column '0x' in 'field list'
 | 
						|
select 0b;
 | 
						|
ERROR 42S22: Unknown column '0b' in 'field list'
 |