2003-11-04 08:40:36 +01:00
|
|
|
drop table if exists t1;
|
2001-09-28 07:05:54 +02:00
|
|
|
select length(encrypt('foo', 'ff')) <> 0;
|
2001-05-23 01:30:17 +02:00
|
|
|
length(encrypt('foo', 'ff')) <> 0
|
|
|
|
1
|
2003-11-04 13:09:03 +01:00
|
|
|
create table t1 (name varchar(50), pw varchar(64));
|
2003-10-21 12:14:06 +02:00
|
|
|
insert into t1 values ('tom', password('my_pass'));
|
|
|
|
set @pass='my_pass';
|
|
|
|
select name from t1 where name='tom' and pw=password(@pass);
|
|
|
|
name
|
|
|
|
tom
|
|
|
|
select name from t1 where name='tom' and pw=password(@undefined);
|
|
|
|
name
|
|
|
|
drop table t1;
|
2003-07-08 00:36:14 +02:00
|
|
|
select password('abc');
|
|
|
|
password('abc')
|
2003-09-03 14:43:41 +02:00
|
|
|
*0D3CED9BEC10A777AEC23CCC353A8C08A633045E
|
2003-07-08 00:36:14 +02:00
|
|
|
select password('');
|
|
|
|
password('')
|
|
|
|
|
|
|
|
select old_password('abc');
|
|
|
|
old_password('abc')
|
|
|
|
7cd2b5942be28759
|
|
|
|
select old_password('');
|
|
|
|
old_password('')
|
|
|
|
|
|
|
|
select password('gabbagabbahey');
|
|
|
|
password('gabbagabbahey')
|
2003-09-03 14:43:41 +02:00
|
|
|
*B0F99D2963660DD7E16B751EC9EE2F17B6A68FA6
|
2003-07-08 00:36:14 +02:00
|
|
|
select old_password('idkfa');
|
|
|
|
old_password('idkfa')
|
|
|
|
5c078dc54ca0fcca
|
|
|
|
select length(password('1'));
|
|
|
|
length(password('1'))
|
|
|
|
41
|
|
|
|
select length(encrypt('test'));
|
|
|
|
length(encrypt('test'))
|
|
|
|
13
|
|
|
|
select encrypt('test','aa');
|
|
|
|
encrypt('test','aa')
|
|
|
|
aaqPiZY5xR5l.
|
|
|
|
select old_password(NULL);
|
|
|
|
old_password(NULL)
|
|
|
|
NULL
|
|
|
|
select password(NULL);
|
|
|
|
password(NULL)
|
2013-07-05 08:52:31 +02:00
|
|
|
|
2003-07-08 00:36:14 +02:00
|
|
|
set global old_passwords=on;
|
|
|
|
select password('');
|
|
|
|
password('')
|
|
|
|
|
|
|
|
select old_password('');
|
|
|
|
old_password('')
|
|
|
|
|
|
|
|
select password('idkfa');
|
|
|
|
password('idkfa')
|
2003-09-03 14:43:41 +02:00
|
|
|
*B669C9DAC3AA6F2254B03CDEF8DFDD6B2D1054BA
|
2003-07-08 00:36:14 +02:00
|
|
|
select old_password('idkfa');
|
|
|
|
old_password('idkfa')
|
|
|
|
5c078dc54ca0fcca
|
|
|
|
set old_passwords=on;
|
|
|
|
select password('idkfa');
|
|
|
|
password('idkfa')
|
|
|
|
5c078dc54ca0fcca
|
|
|
|
select old_password('idkfa');
|
|
|
|
old_password('idkfa')
|
|
|
|
5c078dc54ca0fcca
|
|
|
|
set global old_passwords=off;
|
|
|
|
select password('idkfa');
|
|
|
|
password('idkfa')
|
|
|
|
5c078dc54ca0fcca
|
|
|
|
select old_password('idkfa');
|
|
|
|
old_password('idkfa')
|
|
|
|
5c078dc54ca0fcca
|
|
|
|
set old_passwords=off;
|
|
|
|
select password('idkfa ');
|
|
|
|
password('idkfa ')
|
2003-09-03 14:43:41 +02:00
|
|
|
*2DC31D90647B4C1ABC9231563D2236E96C9A2DB2
|
2003-07-08 00:36:14 +02:00
|
|
|
select password('idkfa');
|
|
|
|
password('idkfa')
|
2003-09-03 14:43:41 +02:00
|
|
|
*B669C9DAC3AA6F2254B03CDEF8DFDD6B2D1054BA
|
2003-07-08 00:36:14 +02:00
|
|
|
select password(' idkfa');
|
|
|
|
password(' idkfa')
|
2003-09-03 14:43:41 +02:00
|
|
|
*12B099E56BB7FE8D43C78FD834A9D1D11178D045
|
2003-07-08 00:36:14 +02:00
|
|
|
select old_password('idkfa');
|
|
|
|
old_password('idkfa')
|
|
|
|
5c078dc54ca0fcca
|
|
|
|
select old_password(' i d k f a ');
|
|
|
|
old_password(' i d k f a ')
|
|
|
|
5c078dc54ca0fcca
|
2003-11-07 08:43:24 +01:00
|
|
|
explain extended select password('idkfa '), old_password('idkfa');
|
2006-07-28 19:27:01 +02:00
|
|
|
id select_type table type possible_keys key key_len ref rows filtered Extra
|
|
|
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
2003-11-07 08:43:24 +01:00
|
|
|
Warnings:
|
2008-02-12 20:09:16 +01:00
|
|
|
Note 1003 select password('idkfa ') AS `password('idkfa ')`,old_password('idkfa') AS `old_password('idkfa')`
|
2022-02-28 17:31:59 +01:00
|
|
|
CREATE VIEW v1 AS SELECT ENCRYPT("dhgdhgd");
|
|
|
|
SELECT * FROM v1;
|
|
|
|
drop view v1;
|
|
|
|
CREATE VIEW v1 AS SELECT SUBSTRING_INDEX("dkjhgd:kjhdjh", ":", 1);
|
|
|
|
SELECT * FROM v1;
|
|
|
|
SUBSTRING_INDEX("dkjhgd:kjhdjh", ":", 1)
|
|
|
|
dkjhgd
|
|
|
|
drop view v1;
|
2005-10-07 01:15:53 +02:00
|
|
|
select encrypt('1234','_.');
|
|
|
|
encrypt('1234','_.')
|
|
|
|
#
|
2009-05-27 12:20:57 +02:00
|
|
|
#
|
|
|
|
# Bug #44767: invalid memory reads in password() and old_password()
|
|
|
|
# functions
|
|
|
|
#
|
|
|
|
CREATE TABLE t1(c1 MEDIUMBLOB);
|
|
|
|
INSERT INTO t1 VALUES (REPEAT('a', 1024));
|
|
|
|
SELECT OLD_PASSWORD(c1), PASSWORD(c1) FROM t1;
|
|
|
|
OLD_PASSWORD(c1) PASSWORD(c1)
|
|
|
|
77023ffe214c04ff *82E58A2C08AAFE72C8EB523069CD8ADB33F78F58
|
|
|
|
DROP TABLE t1;
|
2022-02-28 17:31:59 +01:00
|
|
|
drop table if exists t1;
|
|
|
|
create table t1 (f1 smallint(6) default null, f2 mediumtext character set utf8)
|
|
|
|
engine=myisam default charset=latin1;
|
|
|
|
insert into t1 values (null,'contraction\'s');
|
|
|
|
insert into t1 values (-15818,'requirement\'s');
|
|
|
|
select encrypt(f1,f2) as a from t1,(select encrypt(f1,f2) as b from t1) a;
|
|
|
|
drop table t1;
|
2016-12-29 13:23:18 +01:00
|
|
|
# End of 5.0 tests
|
2016-09-22 05:00:10 +02:00
|
|
|
#
|
MDEV-10306 Wrong results with combination of CONCAT, SUBSTR and CONVERT in subquery
The bug happens because of a combination of unfortunate circumstances:
1. Arguments args[0] and args[2] of Item_func_concat point recursively
(through Item_direct_view_ref's) to the same Item_func_conv_charset.
Both args[0]->args[0]->ref[0] and args[2]->args[0]->ref[0] refer to
this Item_func_conv_charset.
2. When Item_func_concat::args[0]->val_str() is called,
Item_func_conv_charset::val_str() writes its result to
Item_func_conc_charset::tmp_value.
3. Then, for optimization purposes (to avoid copying),
Item_func_substr::val_str() initializes Item_func_substr::tmp_value
to point to the buffer fragment owned by Item_func_conv_charset::tmp_value
Item_func_substr::tmp_value is returned as a result of
Item_func_concat::args[0]->val_str().
4. Due to optimization to avoid memory reallocs,
Item_func_concat::val_str() remembers the result of args[0]->val_str()
in "res" and further uses "res" to collect the return value.
5. When Item_func_concat::args[2]->val_str() is called,
Item_func_conv_charset::tmp_value gets overwritten (see #1),
which effectively overwrites args[0]'s Item_func_substr::tmp_value (see #3),
which effectively overwrites "res" (see #4).
This patch does the following:
a. Changes Item_func_conv_charset::val_str(String *str) to use
tmp_value and str the other way around. After this change tmp_value
is used to store a temporary result, while str is used to return the value.
The fixes the second problem (without SUBSTR):
SELECT CONCAT(t2,'-',t2) c2
FROM (SELECT CONVERT(t USING latin1) t2 FROM t1) sub;
As Item_func_concat::val_str() supplies two different buffers when calling
args[0]->val_str() and args[2]->val_str(), in the new reduction the result
created during args[0]->val_str() does not get overwritten by
args[2]->val_str().
b. Fixing the same problem in val_str() for similar classes
Item_func_to_base64
Item_func_from_base64
Item_func_weight_string
Item_func_hex
Item_func_unhex
Item_func_quote
Item_func_compress
Item_func_uncompress
Item_func_des_encrypt
Item_func_des_decrypt
Item_func_conv_charset
Item_func_reverse
Item_func_soundex
Item_func_aes_encrypt
Item_func_aes_decrypt
Item_func_buffer
c. Fixing Item_func::val_str_from_val_str_ascii() the same way.
Now Item_str_ascii_func::ascii_buff is used for temporary value,
while the parameter passed to val_str() is used to return the result.
This fixes the same problem when conversion (from ASCII to e.g. UCS2)
takes place. See the ctype_ucs.test for example queries that returned
wrong results before the fix.
d. Some Item_func descendand classes had temporary String buffers
(tmp_value and tmp_str), but did not really use them.
Removing these temporary buffers from:
Item_func_decode_histogram
Item_func_format
Item_func_binlog_gtid_pos
Item_func_spatial_collection:
e. Removing Item_func_buffer::tmp_value, because it's not used any more.
f. Renaming Item_func_[un]compress::buffer to "tmp_value",
for consistency with other classes.
Note, this patch does not fix the following classes
(although they have a similar problem):
Item_str_conv
Item_func_make_set
Item_char_typecast
They have a complex implementations and simple swapping between "tmp_value"
and "str" won't work. These classes will be fixed separately.
2017-06-19 10:45:32 +02:00
|
|
|
# Start of 10.0 tests
|
|
|
|
#
|
|
|
|
#
|
|
|
|
# MDEV-10306 Wrong results with combination of CONCAT, SUBSTR and CONVERT in subquery
|
|
|
|
#
|
|
|
|
SET @save_optimizer_switch=@@optimizer_switch;
|
|
|
|
SET optimizer_switch='derived_merge=on';
|
|
|
|
CREATE TABLE t1 (t VARCHAR(32) CHARSET latin1);
|
|
|
|
INSERT INTO t1 VALUES('abcdefghi');
|
|
|
|
SELECT CONCAT(t2,'-',t2) c2 FROM (SELECT ENCRYPT(t,'aa') t2 FROM t1) sub;
|
|
|
|
c2
|
|
|
|
aaHHlPHAM4sjs-aaHHlPHAM4sjs
|
|
|
|
DROP TABLE t1;
|
|
|
|
SET optimizer_switch=@save_optimizer_switch;
|
|
|
|
#
|
|
|
|
# End of 10.0 tests
|
|
|
|
#
|
2017-06-21 15:19:43 +02:00
|
|
|
#
|
2016-09-22 05:00:10 +02:00
|
|
|
# Start of 10.1 tests
|
|
|
|
#
|
|
|
|
# Start of func_str_ascii_checksum.inc
|
|
|
|
#
|
|
|
|
# MDEV-10850 Wrong result for WHERE .. (f2=TO_BASE64('test') OR f2=TO_BASE64('TEST'))
|
|
|
|
#
|
|
|
|
CREATE TABLE t1 (f1 VARCHAR(4), f2 VARCHAR(255), UNIQUE KEY k1 (f1,f2));
|
|
|
|
INSERT INTO t1 VALUES ('test',password('test')), ('TEST', password('TEST'));
|
|
|
|
SELECT * FROM t1 IGNORE INDEX(k1) WHERE f1='test' AND (f2= password("test") OR f2= password("TEST"));
|
|
|
|
f1 f2
|
|
|
|
test *94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29
|
|
|
|
TEST *47A6B0EA08A36FAEBE4305B373FE37E3CF27C357
|
|
|
|
SELECT * FROM t1 WHERE f1='test' AND (f2= password("test") OR f2= password("TEST"));
|
|
|
|
f1 f2
|
|
|
|
TEST *47A6B0EA08A36FAEBE4305B373FE37E3CF27C357
|
|
|
|
test *94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29
|
|
|
|
SELECT * FROM t1 WHERE f1='test' AND (f2= password("TEST") OR f2= password("test"));
|
|
|
|
f1 f2
|
|
|
|
TEST *47A6B0EA08A36FAEBE4305B373FE37E3CF27C357
|
|
|
|
test *94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29
|
|
|
|
DROP TABLE t1;
|
|
|
|
#
|
|
|
|
# MDEV-10425 Assertion `collation.derivation == DERIVATION_IMPLICIT' failed in Item_func_conv_charset::fix_length_and_dec()
|
|
|
|
#
|
|
|
|
PREPARE stmt FROM "SELECT password(CONVERT('foo' USING latin1))";
|
|
|
|
EXECUTE stmt;
|
|
|
|
password(CONVERT('foo' USING latin1))
|
|
|
|
*F3A2A51A9B0F2BE2468926B4132313728C250DBF
|
|
|
|
DEALLOCATE PREPARE stmt;
|
|
|
|
# End of func_str_ascii_checksum.inc
|
|
|
|
# Start of func_str_ascii_checksum.inc
|
|
|
|
#
|
|
|
|
# MDEV-10850 Wrong result for WHERE .. (f2=TO_BASE64('test') OR f2=TO_BASE64('TEST'))
|
|
|
|
#
|
|
|
|
CREATE TABLE t1 (f1 VARCHAR(4), f2 VARCHAR(255), UNIQUE KEY k1 (f1,f2));
|
|
|
|
INSERT INTO t1 VALUES ('test',old_password('test')), ('TEST', old_password('TEST'));
|
|
|
|
SELECT * FROM t1 IGNORE INDEX(k1) WHERE f1='test' AND (f2= old_password("test") OR f2= old_password("TEST"));
|
|
|
|
f1 f2
|
|
|
|
test 378b243e220ca493
|
|
|
|
TEST 06df397e084be793
|
|
|
|
SELECT * FROM t1 WHERE f1='test' AND (f2= old_password("test") OR f2= old_password("TEST"));
|
|
|
|
f1 f2
|
|
|
|
TEST 06df397e084be793
|
|
|
|
test 378b243e220ca493
|
|
|
|
SELECT * FROM t1 WHERE f1='test' AND (f2= old_password("TEST") OR f2= old_password("test"));
|
|
|
|
f1 f2
|
|
|
|
TEST 06df397e084be793
|
|
|
|
test 378b243e220ca493
|
|
|
|
DROP TABLE t1;
|
|
|
|
#
|
|
|
|
# MDEV-10425 Assertion `collation.derivation == DERIVATION_IMPLICIT' failed in Item_func_conv_charset::fix_length_and_dec()
|
|
|
|
#
|
|
|
|
PREPARE stmt FROM "SELECT old_password(CONVERT('foo' USING latin1))";
|
|
|
|
EXECUTE stmt;
|
|
|
|
old_password(CONVERT('foo' USING latin1))
|
|
|
|
7c786c222596437b
|
|
|
|
DEALLOCATE PREPARE stmt;
|
|
|
|
# End of func_str_ascii_checksum.inc
|
|
|
|
#
|
2016-09-22 08:03:12 +02:00
|
|
|
# MDEV-10864 Wrong result for WHERE .. (f2=COMPRESS('test') OR f2=COMPRESS('TEST'))
|
|
|
|
#
|
|
|
|
CREATE TABLE t1 (f1 VARCHAR(4), f2 VARCHAR(64), UNIQUE KEY k1 (f1,f2));
|
|
|
|
INSERT INTO t1 VALUES ('test',encrypt('test','key')), ('TEST', encrypt('TEST','key'));
|
|
|
|
SELECT f1 FROM t1 ignore index(k1) WHERE f1='test' AND (f2= encrypt('test','key') OR f2= encrypt('TEST','key'));
|
|
|
|
f1
|
|
|
|
test
|
|
|
|
TEST
|
|
|
|
SELECT f1 FROM t1 WHERE f1='test' AND (f2= encrypt('test','key') OR f2= encrypt('TEST','key'));
|
|
|
|
f1
|
|
|
|
TEST
|
|
|
|
test
|
|
|
|
SELECT f1 FROM t1 WHERE f1='test' AND (f2= encrypt('TEST','key') OR f2= encrypt('test','key'));
|
|
|
|
f1
|
|
|
|
TEST
|
|
|
|
test
|
|
|
|
DROP TABLE t1;
|
2016-12-29 13:23:18 +01:00
|
|
|
# Start of 10.2 tests
|
2016-06-26 20:44:32 +02:00
|
|
|
CREATE TABLE t1 (a VARCHAR(10), b VARCHAR(30) DEFAULT ENCRYPT(a,123));
|
|
|
|
SHOW CREATE TABLE t1;
|
|
|
|
Table Create Table
|
|
|
|
t1 CREATE TABLE `t1` (
|
|
|
|
`a` varchar(10) DEFAULT NULL,
|
2016-11-07 17:17:40 +01:00
|
|
|
`b` varchar(30) DEFAULT encrypt(`a`,123)
|
2022-09-02 15:32:14 +02:00
|
|
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
|
2016-06-26 20:44:32 +02:00
|
|
|
INSERT INTO t1 (a) VALUES ('hello');
|
|
|
|
SELECT * FROM t1;
|
|
|
|
a b
|
|
|
|
hello 12NKz5XM5JeKI
|
|
|
|
DROP TABLE t1;
|
2020-08-07 13:37:41 +02:00
|
|
|
# End of 10.2 tests
|
2022-03-01 08:22:52 +01:00
|
|
|
#
|
|
|
|
# MDEV-25778 Overrun buffer in to_string_native()
|
|
|
|
#
|
|
|
|
CREATE TABLE t1 (a DECIMAL(15,11) ZEROFILL);
|
|
|
|
INSERT INTO t1 (a) VALUES (0.1),(0.2);
|
|
|
|
SELECT length(ENCRYPT(a)) AS f, COUNT(*) FROM t1 GROUP BY f;
|
|
|
|
f COUNT(*)
|
|
|
|
13 2
|
|
|
|
DROP TABLE t1;
|
|
|
|
# End of 10.6 tests
|