diff options
author | Alexander Barkov <bar@mariadb.com> | 2020-05-29 11:07:55 +0400 |
---|---|---|
committer | Alexander Barkov <bar@mariadb.com> | 2020-05-29 11:15:28 +0400 |
commit | cdc2508ed1a5488f3b20fae7ee8a72b4275a65b6 (patch) | |
tree | a49419144c5be0aa4057afceb58bfeaf064609ee /mysql-test/include/ctype_ident_sys.inc | |
parent | c2a929185c147fc85bbf91e2c537bcdd98f2e680 (diff) | |
download | mariadb-git-cdc2508ed1a5488f3b20fae7ee8a72b4275a65b6.tar.gz |
MDEV-22625 SIGSEGV in intern_find_sys_var (optimized builds)
The constructor of Lex_ident_sys returns LEX_CSTRING(NULL,0) if character set
conversion goes wrong, and raises the "wrong character string" error in
the diagnostics area.
The code in sql_yacc.yy did not check Lex_ident_sys::ptr against NULL,
so the execution entered functions that did not expect NULL (and crashed).
Fixing the code to do MYSQL_YYABORT if Lex_ident_sys::ptr is NULL
after constructing.
Diffstat (limited to 'mysql-test/include/ctype_ident_sys.inc')
-rw-r--r-- | mysql-test/include/ctype_ident_sys.inc | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/mysql-test/include/ctype_ident_sys.inc b/mysql-test/include/ctype_ident_sys.inc new file mode 100644 index 00000000000..80ac962f031 --- /dev/null +++ b/mysql-test/include/ctype_ident_sys.inc @@ -0,0 +1,73 @@ +--echo # +--echo # SET STATEMENT (bad|good.bad|bad.good)=1 +--echo # + +--error ER_INVALID_CHARACTER_STRING +EXECUTE IMMEDIATE CONCAT('SET STATEMENT ',@seq, '=1 SELECT 1'); + +--error ER_INVALID_CHARACTER_STRING +EXECUTE IMMEDIATE CONCAT('SET STATEMENT ',@seq, '.a=1 SELECT 1'); + +--error ER_INVALID_CHARACTER_STRING +EXECUTE IMMEDIATE CONCAT('SET STATEMENT a.',@seq, '=1 SELECT 1'); + + +--echo # +--echo # SET SESSION (bad|good.bad|bad.good)=1 +--echo # + +--error ER_INVALID_CHARACTER_STRING +EXECUTE IMMEDIATE CONCAT('SET SESSION ',@seq, '=1 SELECT 1'); + +--error ER_INVALID_CHARACTER_STRING +EXECUTE IMMEDIATE CONCAT('SET SESSION ',@seq, '.a=1 SELECT 1'); + +--error ER_INVALID_CHARACTER_STRING +EXECUTE IMMEDIATE CONCAT('SET SESSION a.',@seq, '=1 SELECT 1'); + + +--echo # +--echo # SET (bad|good.bad|bad.good)=1 +--echo # + + +--error ER_INVALID_CHARACTER_STRING +EXECUTE IMMEDIATE CONCAT('SET ', @seq, '=1'); + +--error ER_INVALID_CHARACTER_STRING +EXECUTE IMMEDIATE CONCAT('SET ', @seq, '.a=1'); + +--error ER_INVALID_CHARACTER_STRING +EXECUTE IMMEDIATE CONCAT('SET a.', @seq, '=1'); + + +--echo # +--echo # Oracle SP call: BEGIN (bad|good.bad|bad.good)(params); END +--echo # + +SET sql_mode=ORACLE; +--error ER_INVALID_CHARACTER_STRING +EXECUTE IMMEDIATE CONCAT('BEGIN ',@seq, '(1); END;'); + +--error ER_INVALID_CHARACTER_STRING +EXECUTE IMMEDIATE CONCAT('BEGIN ',@seq, '.a(1); END;'); + +--error ER_INVALID_CHARACTER_STRING +EXECUTE IMMEDIATE CONCAT('BEGIN a.',@seq, '(1); END;'); + + +--echo # +--echo # Oracle assignment: (bad|good.bad|bad.good):= value +--echo # + +--error ER_INVALID_CHARACTER_STRING +EXECUTE IMMEDIATE CONCAT(@seq, ':=1'); + +--error ER_INVALID_CHARACTER_STRING +EXECUTE IMMEDIATE CONCAT(@seq, '.a:=1'); + +--error ER_INVALID_CHARACTER_STRING +EXECUTE IMMEDIATE CONCAT('a.', @seq, ':=1'); + + +SET sql_mode=DEFAULT; |