Commit 9db45d28 authored by Aleksey Midenkov's avatar Aleksey Midenkov

MDEV-27048 UBSAN: runtime error: shift exponent 32 is too large for 32-bit type 'unsigned int'

32-bit variable must be expanded to 64-bit before shift left.
parent 01027326
...@@ -3422,3 +3422,13 @@ drop table t1; ...@@ -3422,3 +3422,13 @@ drop table t1;
# #
alter table txxx engine=innodb, rename to tyyy; alter table txxx engine=innodb, rename to tyyy;
ERROR 42S02: Table 'test.txxx' doesn't exist ERROR 42S02: Table 'test.txxx' doesn't exist
#
# MDEV-27048 UBSAN: runtime error: shift exponent 32 is too large for 32-bit type 'unsigned int'
#
CREATE TABLE t (a INT,b INT,c INT,x TEXT,y TEXT,z TEXT,id INT UNSIGNED AUTO_INCREMENT,i INT,KEY(id),UNIQUE KEY a (a,b,c));
ALTER TABLE t ADD CONSTRAINT test UNIQUE (id) USING HASH;
ERROR HY000: Function or expression 'AUTO_INCREMENT' cannot be used in the USING HASH clause of `id`
DROP TABLE t;
#
# End of 10.7 tests
#
...@@ -2670,3 +2670,15 @@ drop table t1; ...@@ -2670,3 +2670,15 @@ drop table t1;
--echo # --echo #
--error ER_NO_SUCH_TABLE --error ER_NO_SUCH_TABLE
alter table txxx engine=innodb, rename to tyyy; alter table txxx engine=innodb, rename to tyyy;
--echo #
--echo # MDEV-27048 UBSAN: runtime error: shift exponent 32 is too large for 32-bit type 'unsigned int'
--echo #
CREATE TABLE t (a INT,b INT,c INT,x TEXT,y TEXT,z TEXT,id INT UNSIGNED AUTO_INCREMENT,i INT,KEY(id),UNIQUE KEY a (a,b,c));
--error ER_GENERATED_COLUMN_FUNCTION_IS_NOT_ALLOWED
ALTER TABLE t ADD CONSTRAINT test UNIQUE (id) USING HASH;
DROP TABLE t;
--echo #
--echo # End of 10.7 tests
--echo #
...@@ -2545,7 +2545,7 @@ bool ddl_log_write_execute_entry(uint first_entry, ...@@ -2545,7 +2545,7 @@ bool ddl_log_write_execute_entry(uint first_entry,
file_entry_buf[DDL_LOG_ENTRY_TYPE_POS]= (uchar)DDL_LOG_EXECUTE_CODE; file_entry_buf[DDL_LOG_ENTRY_TYPE_POS]= (uchar)DDL_LOG_EXECUTE_CODE;
int4store(file_entry_buf + DDL_LOG_NEXT_ENTRY_POS, first_entry); int4store(file_entry_buf + DDL_LOG_NEXT_ENTRY_POS, first_entry);
int8store(file_entry_buf + DDL_LOG_ID_POS, (cond_entry << DDL_LOG_RETRY_BITS)); int8store(file_entry_buf + DDL_LOG_ID_POS, ((ulonglong)cond_entry << DDL_LOG_RETRY_BITS));
if (!(*active_entry)) if (!(*active_entry))
{ {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment