[MDEV-23210] Assertion `(length % 4) == 0' failed in my_lengthsp_utf32 on ALTER TABLE, SELECT and INSERT Created: 2020-07-18  Updated: 2022-07-04  Resolved: 2022-03-14

Status: Closed
Project: MariaDB Server
Component/s: Character Sets
Affects Version/s: 10.1, 10.2, 10.3, 10.4, 10.5, 10.6, 10.7, 10.8, 10.9
Fix Version/s: 10.2.44, 10.3.35, 10.4.25, 10.5.16, 10.6.8, 10.7.4, 10.8.3

Type: Bug Priority: Critical
Reporter: Roel Van de Paar Assignee: Alexander Barkov
Resolution: Fixed Votes: 0
Labels: affects-tests, regression, regression-10.3

Issue Links:
Issue split
split to MDEV-28062 Assertion `(length % 4) == 0' failed ... Closed
Relates
relates to MDEV-23219 Assertion `(length % 4) == 0' failed ... Closed
relates to MDEV-28835 Assertion `(length % 4) == 0' failed ... Closed
relates to MDEV-29019 Assertion `(length % 4) == 0' failed ... Closed

 Description   

USE test;
SET COLLATION_CONNECTION=utf32_myanmar_ci, CHARACTER_SET_CLIENT=binary;
CREATE TABLE t (a CHAR(1));
ALTER TABLE t CHANGE a a ENUM('a','a') CHARACTER SET utf32;

Leads to:

10.5.5 30e7a0a866dce530d8328c6d614e48d39a264f9b (Debug)

mysqld: /test/10.5_dbg/strings/ctype-ucs2.c:2197: my_lengthsp_utf32: Assertion `(length % 4) == 0' failed.

10.5.5 30e7a0a866dce530d8328c6d614e48d39a264f9b (Debug)

Core was generated by `/test/MD140720-mariadb-10.5.5-linux-x86_64-dbg/bin/mysqld --no-defaults --core-'.
Program terminated with signal SIGABRT, Aborted.
#0  __pthread_kill (threadid=<optimized out>, signo=signo@entry=6)
    at ../sysdeps/unix/sysv/linux/pthread_kill.c:57
[Current thread is 1 (Thread 0x1482c7848700 (LWP 1820126))]
(gdb) bt
#0  __pthread_kill (threadid=<optimized out>, signo=signo@entry=6) at ../sysdeps/unix/sysv/linux/pthread_kill.c:57
#1  0x000055b87dda34d7 in my_write_core (sig=sig@entry=6) at /test/10.5_dbg/mysys/stacktrace.c:518
#2  0x000055b87d55d9ba in handle_fatal_signal (sig=6) at /test/10.5_dbg/sql/signal_handler.cc:330
#3  <signal handler called>
#4  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:51
#5  0x00001482c5ade8b1 in __GI_abort () at abort.c:79
#6  0x00001482c5ace42a in __assert_fail_base (fmt=0x1482c5c55a38 "%s%s%s:%u: %s%sAssertion `%s' failed.\n%n", assertion=assertion@entry=0x55b87e488872 "(length % 4) == 0", file=file@entry=0x55b87e488800 "/test/10.5_dbg/strings/ctype-ucs2.c", line=line@entry=2197, function=function@entry=0x55b87e488db0 <__PRETTY_FUNCTION__.15905> "my_lengthsp_utf32") at assert.c:92
#7  0x00001482c5ace4a2 in __GI___assert_fail (assertion=assertion@entry=0x55b87e488872 "(length % 4) == 0", file=file@entry=0x55b87e488800 "/test/10.5_dbg/strings/ctype-ucs2.c", line=line@entry=2197, function=function@entry=0x55b87e488db0 <__PRETTY_FUNCTION__.15905> "my_lengthsp_utf32") at assert.c:101
#8  0x000055b87ddddc15 in my_lengthsp_utf32 (cs=<optimized out>, ptr=<optimized out>, length=<optimized out>) at /test/10.5_dbg/strings/ctype-ucs2.c:2197
#9  0x000055b87d53e9a8 in charset_info_st::lengthsp (length=<optimized out>, str=0x1482a34749a8 "a", this=<optimized out>) at /test/10.5_dbg/include/m_ctype.h:622
#10 Column_definition::create_interval_from_interval_list (this=this@entry=0x1482a3474a58, mem_root=mem_root@entry=0x1482a341ab50, reuse_interval_list_values=reuse_interval_list_values@entry=true) at /test/10.5_dbg/sql/field.cc:10060
#11 0x000055b87d53ed61 in Column_definition::prepare_interval_field (this=this@entry=0x1482a3474a58, mem_root=mem_root@entry=0x1482a341ab50, reuse_interval_list_values=reuse_interval_list_values@entry=true) at /test/10.5_dbg/sql/field.cc:10117
#12 0x000055b87d3778f2 in Column_definition::prepare_stage1_typelib (this=0x1482a3474a58, thd=0x1482a3415088, mem_root=0x1482a341ab50, file=0x1482a3474d38, table_flags=<optimized out>) at /test/10.5_dbg/sql/sql_table.cc:3232
#13 0x000055b87d484cb8 in Type_handler_typelib::Column_definition_prepare_stage1 (this=<optimized out>, thd=<optimized out>, mem_root=<optimized out>, def=<optimized out>, file=<optimized out>, table_flags=<optimized out>) at /test/10.5_dbg/sql/sql_type.cc:2991
#14 0x000055b87d3775ab in Column_definition::prepare_stage1 (this=this@entry=0x1482a3474a58, thd=thd@entry=0x1482a3415088, mem_root=<optimized out>, file=file@entry=0x1482a3474d38, table_flags=<optimized out>) at /test/10.5_dbg/sql/sql_table.cc:3295
#15 0x000055b87d37e9d8 in mysql_prepare_create_table (thd=thd@entry=0x1482a3415088, create_info=create_info@entry=0x1482c7846220, alter_info=alter_info@entry=0x1482c7846150, db_options=db_options@entry=0x1482c7843828, file=file@entry=0x1482a3474d38, key_info_buffer=key_info_buffer@entry=0x1482c78441d0, key_count=0x1482c78441c8, create_table_mode=-2) at /test/10.5_dbg/sql/sql_table.cc:3635
#16 0x000055b87d382500 in mysql_create_frm_image (thd=thd@entry=0x1482a3415088, db=@0x1482c7845640: {str = 0x1482a3474898 "test", length = 4}, table_name=@0x1482c7845650: {str = 0x1482a3474190 "t", length = 1}, create_info=create_info@entry=0x1482c7846220, alter_info=alter_info@entry=0x1482c7846150, create_table_mode=create_table_mode@entry=-2, key_info=0x1482c78441d0, key_count=0x1482c78441c8, frm=0x1482c78441e0) at /test/10.5_dbg/sql/sql_table.cc:5015
#17 0x000055b87d382f3d in create_table_impl (thd=thd@entry=0x1482a3415088, orig_db=@0x1482c7845640: {str = 0x1482a3474898 "test", length = 4}, orig_table_name=@0x1482c7845650: {str = 0x1482a3474190 "t", length = 1}, db=@0x1482c7845670: {str = 0x1482a3474898 "test", length = 4}, table_name=@0x1482c78456a0: {str = 0x1482c78459da "#sql-alter-1bc5bd-4", length = 19}, path=path@entry=0x1482c7845e9d "./test/#sql-alter-1bc5bd-4", options={m_options = DDL_options_st::OPT_NONE}, create_info=0x1482c7846220, alter_info=0x1482c7846150, create_table_mode=-2, is_trans=0x0, key_info=0x1482c78441d0, key_count=0x1482c78441c8, frm=0x1482c78441e0) at /test/10.5_dbg/sql/sql_table.cc:5271
#18 0x000055b87d38985b in mysql_alter_table (thd=thd@entry=0x1482a3415088, new_db=new_db@entry=0x1482a3419948, new_name=new_name@entry=0x1482a3419d50, create_info=create_info@entry=0x1482c7846220, table_list=<optimized out>, table_list@entry=0x1482a34741c8, alter_info=alter_info@entry=0x1482c7846150, order_num=0, order=0x0, ignore=false, if_exists=false) at /test/10.5_dbg/sql/sql_table.cc:10435
#19 0x000055b87d40da6a in Sql_cmd_alter_table::execute (this=<optimized out>, thd=0x1482a3415088) at /test/10.5_dbg/sql/sql_alter.cc:532
#20 0x000055b87d2b6e4a in mysql_execute_command (thd=thd@entry=0x1482a3415088) at /test/10.5_dbg/sql/sql_parse.cc:5951
#21 0x000055b87d2be752 in mysql_parse (thd=thd@entry=0x1482a3415088, rawbuf=<optimized out>, length=<optimized out>, parser_state=parser_state@entry=0x1482c7847350, is_com_multi=is_com_multi@entry=false, is_next_command=is_next_command@entry=false) at /test/10.5_dbg/sql/sql_parse.cc:7993
#22 0x000055b87d2ab204 in dispatch_command (command=command@entry=COM_QUERY, thd=thd@entry=0x1482a3415088, packet=packet@entry=0x1482a3467089 "ALTER TABLE t CHANGE a a ENUM('a','a') CHARACTER SET utf32", packet_length=packet_length@entry=58, is_com_multi=is_com_multi@entry=false, is_next_command=is_next_command@entry=false) at /test/10.5_dbg/sql/sql_parse.cc:1866
#23 0x000055b87d2a99de in do_command (thd=0x1482a3415088) at /test/10.5_dbg/sql/sql_parse.cc:1347
#24 0x000055b87d405c3b in do_handle_one_connection (connect=<optimized out>, connect@entry=0x1482a68c7808, put_in_cache=put_in_cache@entry=true) at /test/10.5_dbg/sql/sql_connect.cc:1411
#25 0x000055b87d406357 in handle_one_connection (arg=arg@entry=0x1482a68c7808) at /test/10.5_dbg/sql/sql_connect.cc:1313
#26 0x000055b87d869ca8 in pfs_spawn_thread (arg=0x1482c4446508) at /test/10.5_dbg/storage/perfschema/pfs.cc:2201
#27 0x00001482c67c16db in start_thread (arg=0x1482c7848700) at pthread_create.c:463
#28 0x00001482c5bbfa3f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95

Bug confirmed present in:
MariaDB: 10.1.46 (dbg), 10.2.33 (dbg), 10.3.24 (dbg), 10.4.14 (dbg), 10.5.5 (dbg)

Bug confirmed not present in:
MariaDB: 10.1.46 (opt), 10.2.33 (opt), 10.3.24 (opt), 10.4.14 (opt), 10.5.5 (opt)
MySQL: 5.5.62 (dbg), 5.5.62 (opt), 5.6.47 (dbg), 5.6.47 (opt), 5.7.29 (dbg), 5.7.29 (opt), 8.0.19 (dbg), 8.0.19 (opt)



 Comments   
Comment by Roel Van de Paar [ 2020-07-18 ]

Result on optimized build

10.5.5 30e7a0a866dce530d8328c6d614e48d39a264f9b (Optimized)

10.5.5>ALTER TABLE t CHANGE a a ENUM('a','a') CHARACTER SET utf32;
ERROR 1291 (HY000): Column 'a' has duplicated value '?' in ENUM

Comment by Roel Van de Paar [ 2020-07-21 ]

There also seems to be a new regression in 10.4/10.5:

USE test;
SET SQL_MODE='';
SET MAX_SORT_LENGTH=29;
SET COLLATION_CONNECTION=utf32_unicode_ci;
CREATE TEMPORARY TABLE t1 (a INT);
INSERT INTO t1 VALUES (_ucs2 0x00fd),(_ucs2 0x00dd);
SELECT * FROM t1 ORDER BY (oct(a));

Leads to:

10.5.5 30e7a0a866dce530d8328c6d614e48d39a264f9b (Debug)

mysqld: /test/10.5_dbg/strings/ctype-ucs2.c:2197: my_lengthsp_utf32: Assertion `(length % 4) == 0' failed.

10.5.5 30e7a0a866dce530d8328c6d614e48d39a264f9b (Debug)

Core was generated by `/test/MD140720-mariadb-10.5.5-linux-x86_64-dbg/bin/mysqld --no-defaults --core-'.
Program terminated with signal SIGABRT, Aborted.
#0  __pthread_kill (threadid=<optimized out>, signo=signo@entry=6)
    at ../sysdeps/unix/sysv/linux/pthread_kill.c:57
[Current thread is 1 (Thread 0x14611f4e7700 (LWP 2970259))]
(gdb) bt
#0  __pthread_kill (threadid=<optimized out>, signo=signo@entry=6) at ../sysdeps/unix/sysv/linux/pthread_kill.c:57
#1  0x000055e0a89ac4d7 in my_write_core (sig=sig@entry=6) at /test/10.5_dbg/mysys/stacktrace.c:518
#2  0x000055e0a81669ba in handle_fatal_signal (sig=6) at /test/10.5_dbg/sql/signal_handler.cc:330
#3  <signal handler called>
#4  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:51
#5  0x000014611d77d8b1 in __GI_abort () at abort.c:79
#6  0x000014611d76d42a in __assert_fail_base (fmt=0x14611d8f4a38 "%s%s%s:%u: %s%sAssertion `%s' failed.\n%n", assertion=assertion@entry=0x55e0a9091872 "(length % 4) == 0", file=file@entry=0x55e0a9091800 "/test/10.5_dbg/strings/ctype-ucs2.c", line=line@entry=2197, function=function@entry=0x55e0a9091db0 <__PRETTY_FUNCTION__.15905> "my_lengthsp_utf32") at assert.c:92
#7  0x000014611d76d4a2 in __GI___assert_fail (assertion=assertion@entry=0x55e0a9091872 "(length % 4) == 0", file=file@entry=0x55e0a9091800 "/test/10.5_dbg/strings/ctype-ucs2.c", line=line@entry=2197, function=function@entry=0x55e0a9091db0 <__PRETTY_FUNCTION__.15905> "my_lengthsp_utf32") at assert.c:101
#8  0x000055e0a89e6c15 in my_lengthsp_utf32 (cs=<optimized out>, ptr=<optimized out>, length=<optimized out>) at /test/10.5_dbg/strings/ctype-ucs2.c:2197
#9  0x000055e0a89e12f4 in my_ci_lengthsp (length=<optimized out>, str=0x1460fac715c8 "0", cs=0x55e0a96ace00 <my_charset_utf32_unicode_ci>) at /test/10.5_dbg/include/m_ctype.h:889
#10 my_uca_strnxfrm_utf32 (cs=0x55e0a96ace00 <my_charset_utf32_unicode_ci>, dst=0x1460facb2089 '\245' <repeats 200 times>..., dstlen=<optimized out>, nweights=512, src=0x1460fac715c8 "0", srclen=<optimized out>, flags=192) at /test/10.5_dbg/strings/ctype-uca.ic:674
#11 0x000055e0a815f497 in charset_info_st::strnxfrm (flags=192, srclen=<optimized out>, src=<optimized out>, nweights=<optimized out>, dstlen=<optimized out>, dst=0x1460facb2089 '\245' <repeats 200 times>..., this=0x55e0a96ace00 <my_charset_utf32_unicode_ci>) at /test/10.5_dbg/include/m_ctype.h:802
#12 Type_handler_string_result::make_sort_key_part (this=<optimized out>, to=<optimized out>, item=0x1460fac758e8, sort_field=0x1460fac781f8, param=<optimized out>) at /test/10.5_dbg/sql/filesort.cc:1137
#13 0x000055e0a81615cf in make_sortkey (to=0x1460facb2088 "\001", '\245' <repeats 199 times>..., param=0x14611f4e4b40) at /test/10.5_dbg/sql/filesort.cc:2995
#14 make_sortkey (param=param@entry=0x14611f4e4b40, to=0x1460facb2088 "\001", '\245' <repeats 199 times>..., ref_pos=ref_pos@entry=0x1460fac52bc0 "", using_packed_sortkeys=using_packed_sortkeys@entry=false) at /test/10.5_dbg/sql/filesort.cc:1337
#15 0x000055e0a8164a96 in find_all_keys (found_rows=0x1460facaa3f0, pq=0x0, tempfile=0x14611f4e4bf0, buffpek_pointers=0x14611f4e4d60, fs_info=0x1460facaa200, select=0x1460fac778a8, param=0x14611f4e4b40, thd=0x1460fac15088) at /test/10.5_dbg/sql/filesort.cc:956
#16 filesort (thd=thd@entry=0x1460fac15088, table=table@entry=0x1460fac52088, filesort=filesort@entry=0x1460fac77a78, tracker=0x1460fac78168, join=join@entry=0x1460fac75b68, first_table_bit=<optimized out>) at /test/10.5_dbg/sql/filesort.cc:351
#17 0x000055e0a7f115a8 in create_sort_index (thd=0x1460fac15088, join=0x1460fac75b68, tab=tab@entry=0x1460fac76f68, fsort=0x1460fac77a78, fsort@entry=0x0) at /test/10.5_dbg/sql/sql_select.cc:23875
#18 0x000055e0a7f118d6 in st_join_table::sort_table (this=this@entry=0x1460fac76f68) at /test/10.5_dbg/sql/sql_select.cc:21625
#19 0x000055e0a7f11a0a in join_init_read_record (tab=0x1460fac76f68) at /test/10.5_dbg/sql/sql_select.cc:21564
#20 0x000055e0a7f0012b in sub_select (join=0x1460fac75b68, join_tab=0x1460fac76f68, end_of_records=<optimized out>) at /test/10.5_dbg/sql/sql_select.cc:20638
#21 0x000055e0a7f3a2e2 in do_select (procedure=0x0, join=0x1460fac75b68) at /test/10.5_dbg/sql/sql_select.cc:20175
#22 JOIN::exec_inner (this=this@entry=0x1460fac75b68) at /test/10.5_dbg/sql/sql_select.cc:4450
#23 0x000055e0a7f3a8fd in JOIN::exec (this=this@entry=0x1460fac75b68) at /test/10.5_dbg/sql/sql_select.cc:4231
#24 0x000055e0a7f38bf9 in mysql_select (thd=thd@entry=0x1460fac15088, tables=<optimized out>, fields=@0x1460fac742a0: {<base_list> = {<Sql_alloc> = {<No data fields>}, first = 0x1460fac74700, last = 0x1460fac74700, elements = 1}, <No data fields>}, conds=0x0, og_num=1, order=<optimized out>, group=0x0, having=0x0, proc_param=0x0, select_options=2147748608, result=0x1460fac75b40, unit=0x1460fac190a0, select_lex=0x1460fac74150) at /test/10.5_dbg/sql/sql_select.cc:4655
#25 0x000055e0a7f38f28 in handle_select (thd=thd@entry=0x1460fac15088, lex=lex@entry=0x1460fac18fd8, result=result@entry=0x1460fac75b40, setup_tables_done_option=setup_tables_done_option@entry=0) at /test/10.5_dbg/sql/sql_select.cc:417
#26 0x000055e0a7ec17e2 in execute_sqlcom_select (thd=thd@entry=0x1460fac15088, all_tables=0x1460fac74748) at /test/10.5_dbg/sql/sql_parse.cc:6209
#27 0x000055e0a7eba8b6 in mysql_execute_command (thd=thd@entry=0x1460fac15088) at /test/10.5_dbg/sql/sql_parse.cc:3931
#28 0x000055e0a7ec7752 in mysql_parse (thd=thd@entry=0x1460fac15088, rawbuf=<optimized out>, length=<optimized out>, parser_state=parser_state@entry=0x14611f4e6350, is_com_multi=is_com_multi@entry=false, is_next_command=is_next_command@entry=false) at /test/10.5_dbg/sql/sql_parse.cc:7993
#29 0x000055e0a7eb4204 in dispatch_command (command=command@entry=COM_QUERY, thd=thd@entry=0x1460fac15088, packet=packet@entry=0x1460fac67089 "", packet_length=packet_length@entry=34, is_com_multi=is_com_multi@entry=false, is_next_command=is_next_command@entry=false) at /test/10.5_dbg/sql/sql_parse.cc:1866
#30 0x000055e0a7eb29de in do_command (thd=0x1460fac15088) at /test/10.5_dbg/sql/sql_parse.cc:1347
#31 0x000055e0a800ec3b in do_handle_one_connection (connect=<optimized out>, connect@entry=0x1460fe4c7028, put_in_cache=put_in_cache@entry=true) at /test/10.5_dbg/sql/sql_connect.cc:1411
#32 0x000055e0a800f357 in handle_one_connection (arg=arg@entry=0x1460fe4c7028) at /test/10.5_dbg/sql/sql_connect.cc:1313
#33 0x000055e0a8472ca8 in pfs_spawn_thread (arg=0x14611c046508) at /test/10.5_dbg/storage/perfschema/pfs.cc:2201
#34 0x000014611e4606db in start_thread (arg=0x14611f4e7700) at pthread_create.c:463
#35 0x000014611d85ea3f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95

Bug confirmed present in:
MariaDB: 10.4.14 (dbg), 10.5.5 (dbg)

Bug confirmed not present in:
MariaDB: 10.1.46 (dbg), 10.1.46 (opt), 10.2.33 (dbg), 10.2.33 (opt), 10.3.24 (dbg), 10.3.24 (opt), 10.4.14 (opt), 10.5.5 (opt)
MySQL: 5.5.62 (dbg), 5.5.62 (opt), 5.6.47 (dbg), 5.6.47 (opt), 5.7.29 (dbg), 5.7.29 (opt), 8.0.19 (dbg), 8.0.19 (opt)

Comment by Roel Van de Paar [ 2020-07-21 ]

Unique ID's

(length % 4) == 0|SIGABRT|my_lengthsp_utf32|charset_info_st::lengthsp|Column_definition::create_interval_from_interval_list|Column_definition::prepare_interval_field  # Original testcase
(length % 4) == 0|SIGABRT|my_lengthsp_utf32|my_ci_lengthsp|my_uca_strnxfrm_utf32|charset_info_st::strnxfrm  # Secondary testcase
(length % 4) == 0|SIGABRT|my_lengthsp_utf32|my_uca_strnxfrm_utf32|Type_handler_string_result::make_sort_key|make_sortkey  # Testcase in comment after this comment

Comment by Roel Van de Paar [ 2020-08-22 ]

USE test;
SET COLLATION_CONNECTION=utf32_czech_ci;
CREATE TABLE t (a INT);
INSERT INTO t VALUES (1);
SELECT 1 FROM t ORDER BY @x:=makedate(a,a);

Leads to:

10.4.15 eae968f62d285de97ed607c87bc131cd863d5d03 (Debug)

mysqld: /test/10.4_dbg/strings/ctype-ucs2.c:2195: my_lengthsp_utf32: Assertion `(length % 4) == 0' failed.

10.4.15 eae968f62d285de97ed607c87bc131cd863d5d03 (Debug)

Core was generated by `/test/MD110820-mariadb-10.4.15-linux-x86_64-dbg/bin/mysqld --no-defaults --core'.
Program terminated with signal SIGABRT, Aborted.
#0  __pthread_kill (threadid=<optimized out>, signo=signo@entry=6)
    at ../sysdeps/unix/sysv/linux/pthread_kill.c:57
[Current thread is 1 (Thread 0x14d314f6e700 (LWP 1387271))]
(gdb) bt
#0  __pthread_kill (threadid=<optimized out>, signo=signo@entry=6) at ../sysdeps/unix/sysv/linux/pthread_kill.c:57
#1  0x0000562c0aedf8a6 in my_write_core (sig=sig@entry=6) at /test/10.4_dbg/mysys/stacktrace.c:482
#2  0x0000562c0a65bcdc in handle_fatal_signal (sig=6) at /test/10.4_dbg/sql/signal_handler.cc:343
#3  <signal handler called>
#4  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:51
#5  0x000014d3132058b1 in __GI_abort () at abort.c:79
#6  0x000014d3131f542a in __assert_fail_base (fmt=0x14d31337ca38 "%s%s%s:%u: %s%sAssertion `%s' failed.\n%n", assertion=assertion@entry=0x562c0b4f1d52 "(length % 4) == 0", file=file@entry=0x562c0b4f1ce0 "/test/10.4_dbg/strings/ctype-ucs2.c", line=line@entry=2195, function=function@entry=0x562c0b4f2290 <__PRETTY_FUNCTION__.15414> "my_lengthsp_utf32") at assert.c:92
#7  0x000014d3131f54a2 in __GI___assert_fail (assertion=assertion@entry=0x562c0b4f1d52 "(length % 4) == 0", file=file@entry=0x562c0b4f1ce0 "/test/10.4_dbg/strings/ctype-ucs2.c", line=line@entry=2195, function=function@entry=0x562c0b4f2290 <__PRETTY_FUNCTION__.15414> "my_lengthsp_utf32") at assert.c:101
#8  0x0000562c0af22845 in my_lengthsp_utf32 (cs=<optimized out>, ptr=<optimized out>, length=<optimized out>) at /test/10.4_dbg/strings/ctype-ucs2.c:2195
#9  0x0000562c0af1cf24 in my_uca_strnxfrm_utf32 (cs=0x562c0bada340 <my_charset_utf32_czech_uca_ci>, dst=0x14d2ed5513b9 '\245' <repeats 200 times>..., dstlen=<optimized out>, nweights=80, src=0x14d2ed5046b0 "2001-01-01", srclen=<optimized out>, flags=192) at /test/10.4_dbg/strings/ctype-uca.ic:674
#10 0x0000562c0a656e42 in Type_handler_string_result::make_sort_key (this=<optimized out>, to=0x14d2ed5513b9 '\245' <repeats 200 times>..., item=0x14d2ed46e8b0, sort_field=0x14d2ed4710a0, param=<optimized out>) at /test/10.4_dbg/sql/filesort.cc:1013
#11 0x0000562c0a6561ba in make_sortkey (param=param@entry=0x14d314f6a270, to=0x14d2ed5513b8 "\001", '\245' <repeats 199 times>..., ref_pos=ref_pos@entry=0x14d2ed441ca8 "") at /test/10.4_dbg/sql/filesort.cc:1198
#12 0x0000562c0a65a805 in find_all_keys (found_rows=0x14d2ed4eb5e0, pq=0x0, tempfile=0x14d314f6a300, buffpek_pointers=0x14d314f6a470, fs_info=0x14d2ed4eb400, select=0x14d2ed470790, param=0x14d314f6a270, thd=0x14d2ed415070) at /test/10.4_dbg/sql/filesort.cc:836
#13 filesort (thd=thd@entry=0x14d2ed415070, table=table@entry=0x14d2ed509070, filesort=filesort@entry=0x14d2ed470960, tracker=0x14d2ed471020, join=join@entry=0x14d2ed46ebc0, first_table_bit=<optimized out>) at /test/10.4_dbg/sql/filesort.cc:263
#14 0x0000562c0a409423 in create_sort_index (thd=0x14d2ed415070, join=0x14d2ed46ebc0, tab=tab@entry=0x14d2ed46fe50, fsort=0x14d2ed470960, fsort@entry=0x0) at /test/10.4_dbg/sql/sql_select.cc:23637
#15 0x0000562c0a40974a in st_join_table::sort_table (this=this@entry=0x14d2ed46fe50) at /test/10.4_dbg/sql/sql_select.cc:21381
#16 0x0000562c0a40987e in join_init_read_record (tab=0x14d2ed46fe50) at /test/10.4_dbg/sql/sql_select.cc:21320
#17 0x0000562c0a3f3eeb in sub_select (join=0x14d2ed46ebc0, join_tab=0x14d2ed46fe50, end_of_records=<optimized out>) at /test/10.4_dbg/sql/sql_select.cc:20397
#18 0x0000562c0a425a70 in do_select (procedure=0x0, join=0x14d2ed46ebc0) at /test/10.4_dbg/sql/sql_select.cc:19938
#19 JOIN::exec_inner (this=this@entry=0x14d2ed46ebc0) at /test/10.4_dbg/sql/sql_select.cc:4473
#20 0x0000562c0a42604d in JOIN::exec (this=this@entry=0x14d2ed46ebc0) at /test/10.4_dbg/sql/sql_select.cc:4255
#21 0x0000562c0a4243f3 in mysql_select (thd=thd@entry=0x14d2ed415070, tables=<optimized out>, wild_num=0, fields=@0x14d2ed46d290: {<base_list> = {<Sql_alloc> = {<No data fields>}, first = 0x14d2ed46d648, last = 0x14d2ed46d648, elements = 1}, <No data fields>}, conds=0x0, og_num=<optimized out>, order=0x14d2ed46ea40, group=0x0, having=0x0, proc_param=0x0, select_options=2147748608, result=0x14d2ed46eb98, unit=0x14d2ed418f98, select_lex=0x14d2ed46d148) at /test/10.4_dbg/sql/sql_select.cc:4687
#22 0x0000562c0a42471e in handle_select (thd=thd@entry=0x14d2ed415070, lex=lex@entry=0x14d2ed418ed8, result=result@entry=0x14d2ed46eb98, setup_tables_done_option=setup_tables_done_option@entry=0) at /test/10.4_dbg/sql/sql_select.cc:410
#23 0x0000562c0a39d3c6 in execute_sqlcom_select (thd=thd@entry=0x14d2ed415070, all_tables=0x14d2ed46d690) at /test/10.4_dbg/sql/sql_parse.cc:6355
#24 0x0000562c0a3a879a in mysql_execute_command (thd=thd@entry=0x14d2ed415070) at /test/10.4_dbg/sql/sql_parse.cc:3889
#25 0x0000562c0a3b3090 in mysql_parse (thd=thd@entry=0x14d2ed415070, rawbuf=<optimized out>, length=<optimized out>, parser_state=parser_state@entry=0x14d314f6d460, is_com_multi=is_com_multi@entry=false, is_next_command=is_next_command@entry=false) at /test/10.4_dbg/sql/sql_parse.cc:7896
#26 0x0000562c0a3b5920 in dispatch_command (command=command@entry=COM_QUERY, thd=thd@entry=0x14d2ed415070, packet=packet@entry=0x14d2ed457071 "", packet_length=packet_length@entry=42, is_com_multi=is_com_multi@entry=false, is_next_command=is_next_command@entry=false) at /test/10.4_dbg/sql/sql_parse.cc:1834
#27 0x0000562c0a3b935b in do_command (thd=0x14d2ed415070) at /test/10.4_dbg/sql/sql_parse.cc:1352
#28 0x0000562c0a4e58b6 in do_handle_one_connection (connect=connect@entry=0x14d311c35790) at /test/10.4_dbg/sql/sql_connect.cc:1412
#29 0x0000562c0a4e59d6 in handle_one_connection (arg=0x14d311c35790) at /test/10.4_dbg/sql/sql_connect.cc:1316
#30 0x000014d31416c6db in start_thread (arg=0x14d314f6e700) at pthread_create.c:463
#31 0x000014d3132e6a3f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95

Bug confirmed present in:
MariaDB: 10.4.15 (dbg)

Bug confirmed not present in:
MariaDB: 10.1.47 (dbg), 10.1.47 (opt), 10.2.34 (dbg), 10.2.34 (opt), 10.3.25 (dbg), 10.3.25 (opt), 10.4.15 (opt), 10.5.6 (dbg), 10.5.6 (opt)
MySQL: 5.5.62 (dbg), 5.5.62 (opt), 5.6.47 (dbg), 5.6.47 (opt), 5.7.29 (dbg), 5.7.29 (opt), 8.0.19 (dbg), 8.0.19 (opt)

Comment by Roel Van de Paar [ 2022-02-16 ]

Another iteration.

SET sql_mode='';
CREATE TABLE t (HOST CHAR DEFAULT '%',USER CHAR DEFAULT '%',ROLE CHAR DEFAULT '%',ENABLED ENUM ('a','a') DEFAULT 'a',HISTORY ENUM ('a','a') DEFAULT 'a') ROW_FORMAT=DYNAMIC COLLATE=utf32_unicode_nopad_ci ENGINE=InnoDB;
INSERT INTO t SELECT * FROM t;

Leads to:

10.9.0 b5852ffbeebc3000982988383daeefb0549e058a (Debug)

mysqld: /test/10.9_dbg/strings/ctype-ucs2.c:2226: my_lengthsp_utf32: Assertion `(length % 4) == 0' failed.

10.9.0 b5852ffbeebc3000982988383daeefb0549e058a (Debug)

Core was generated by `/test/MD140222-mariadb-10.9.0-linux-x86_64-dbg/bin/mysqld --no-defaults --core-'.
Program terminated with signal SIGABRT, Aborted.
#0  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50
[Current thread is 1 (Thread 0x14d33c07c700 (LWP 1443699))]
(gdb) bt
#0  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50
#1  0x000014d33f639859 in __GI_abort () at abort.c:79
#2  0x000014d33f639729 in __assert_fail_base (fmt=0x14d33f7cf588 "%s%s%s:%u: %s%sAssertion `%s' failed.\n%n", assertion=0x5603b8011c9a "(length % 4) == 0", file=0x5603b8011c28 "/test/10.9_dbg/strings/ctype-ucs2.c", line=2226, function=<optimized out>) at assert.c:92
#3  0x000014d33f64af36 in __GI___assert_fail (assertion=assertion@entry=0x5603b8011c9a "(length % 4) == 0", file=file@entry=0x5603b8011c28 "/test/10.9_dbg/strings/ctype-ucs2.c", line=line@entry=2226, function=function@entry=0x5603b8012390 <__PRETTY_FUNCTION__.18380> "my_lengthsp_utf32") at assert.c:101
#4  0x00005603b79ad862 in my_lengthsp_utf32 (cs=<optimized out>, ptr=<optimized out>, length=<optimized out>) at /test/10.9_dbg/strings/ctype-ucs2.c:2226
#5  0x00005603b7133f36 in charset_info_st::lengthsp (length=2, str=0x14d2a402113a "", this=<optimized out>) at /test/10.9_dbg/include/m_ctype.h:699
#6  Field_enum::store (this=this@entry=0x14d2a40784e0, from=0x14d2a402113a "", length=2, cs=0x5603b84436c0 <my_charset_utf32_unicode_nopad_ci>) at /test/10.9_dbg/sql/field.cc:9224
#7  0x00005603b6fb095d in Field::save_in_field_str (this=this@entry=0x14d2a402dd28, to=to@entry=0x14d2a40784e0) at /test/10.9_dbg/sql/sql_string.h:278
#8  0x00005603b71470c7 in Field_enum::save_in_field (this=0x14d2a402dd28, to=0x14d2a40784e0) at /test/10.9_dbg/sql/field.h:4786
#9  0x00005603b7147592 in Field_enum::store_field (this=0x14d2a40784e0, from=0x14d2a402dd28) at /test/10.9_dbg/sql/field.h:4780
#10 0x00005603b7147972 in field_conv_incompatible (to=to@entry=0x14d2a40784e0, from=from@entry=0x14d2a402dd28) at /test/10.9_dbg/sql/field_conv.cc:850
#11 0x00005603b7148da1 in field_conv (to=to@entry=0x14d2a40784e0, from=from@entry=0x14d2a402dd28) at /test/10.9_dbg/sql/field_conv.cc:861
#12 0x00005603b6eba09d in Create_tmp_table::finalize (this=this@entry=0x14d33c07a8a0, thd=thd@entry=0x14d2a4000db8, table=table@entry=0x14d2a4077350, param=param@entry=0x14d2a4073660, do_not_open=do_not_open@entry=true, keep_row_order=keep_row_order@entry=false) at /test/10.9_dbg/sql/sql_select.cc:19275
#13 0x00005603b6ebacea in create_tmp_table (thd=0x14d2a4000db8, param=0x14d2a4073660, fields=@0x14d2a4015fa8: {<base_list> = {<Sql_alloc> = {<No data fields>}, first = 0x14d2a4014b38, last = 0x14d2a4014b38, elements = 5}, <No data fields>}, group=group@entry=0x0, distinct=distinct@entry=false, save_sum_fields=save_sum_fields@entry=false, select_options=2202244877056, rows_limit=18446744073709551615, table_alias=0x5603b8271ba0 <empty_clex_str>, do_not_open=true, keep_row_order=false) at /test/10.9_dbg/sql/sql_select.cc:19643
#14 0x00005603b6ecae91 in JOIN::create_postjoin_aggr_table (this=this@entry=0x14d2a4015c40, tab=tab@entry=0x14d2a4017978, table_fields=table_fields@entry=0x14d2a4015fa8, table_group=0x0, save_sum_fields=<optimized out>, distinct=distinct@entry=false, keep_row_order=false) at /test/10.9_dbg/sql/sql_select.cc:4026
#15 0x00005603b6ecc0ce in JOIN::make_aggr_tables_info (this=this@entry=0x14d2a4015c40) at /test/10.9_dbg/sql/sql_select.cc:3605
#16 0x00005603b6edf2cd in JOIN::optimize_stage2 (this=this@entry=0x14d2a4015c40) at /test/10.9_dbg/sql/sql_select.cc:3233
#17 0x00005603b6ee0ee8 in JOIN::optimize_inner (this=this@entry=0x14d2a4015c40) at /test/10.9_dbg/sql/sql_select.cc:2492
#18 0x00005603b6ee11dc in JOIN::optimize (this=this@entry=0x14d2a4015c40) at /test/10.9_dbg/sql/sql_select.cc:1808
#19 0x00005603b6ee1880 in mysql_select (thd=thd@entry=0x14d2a4000db8, tables=0x14d2a4014b80, fields=@0x14d2a4014848: {<base_list> = {<Sql_alloc> = {<No data fields>}, first = 0x14d2a4014b38, last = 0x14d2a4016818, elements = 5}, <No data fields>}, conds=0x0, og_num=0, order=0x0, group=0x0, having=0x0, proc_param=0x0, select_options=2202244745984, result=0x14d2a4015b80, unit=0x14d2a40051c8, select_lex=0x14d2a40145a8) at /test/10.9_dbg/sql/sql_select.cc:4993
#20 0x00005603b6ee1b84 in handle_select (thd=thd@entry=0x14d2a4000db8, lex=lex@entry=0x14d2a40050f0, result=result@entry=0x14d2a4015b80, setup_tables_done_option=setup_tables_done_option@entry=1073741824) at /test/10.9_dbg/sql/sql_select.cc:543
#21 0x00005603b6e500c4 in mysql_execute_command (thd=thd@entry=0x14d2a4000db8, is_called_from_prepared_stmt=is_called_from_prepared_stmt@entry=false) at /test/10.9_dbg/sql/sql_parse.cc:4708
#22 0x00005603b6e3a315 in mysql_parse (thd=thd@entry=0x14d2a4000db8, rawbuf=<optimized out>, length=<optimized out>, parser_state=parser_state@entry=0x14d33c07b400) at /test/10.9_dbg/sql/sql_parse.cc:8027
#23 0x00005603b6e48fb1 in dispatch_command (command=command@entry=COM_QUERY, thd=thd@entry=0x14d2a4000db8, packet=packet@entry=0x14d2a400b889 "INSERT INTO t SELECT * FROM t", packet_length=packet_length@entry=29, blocking=blocking@entry=true) at /test/10.9_dbg/sql/sql_class.h:1362
#24 0x00005603b6e4c3f8 in do_command (thd=0x14d2a4000db8, blocking=blocking@entry=true) at /test/10.9_dbg/sql/sql_parse.cc:1402
#25 0x00005603b6fc6fc4 in do_handle_one_connection (connect=<optimized out>, connect@entry=0x5603b9aa1ce8, put_in_cache=put_in_cache@entry=true) at /test/10.9_dbg/sql/sql_connect.cc:1418
#26 0x00005603b6fc75c9 in handle_one_connection (arg=arg@entry=0x5603b9aa1ce8) at /test/10.9_dbg/sql/sql_connect.cc:1312
#27 0x00005603b744dd67 in pfs_spawn_thread (arg=0x5603b99e4768) at /test/10.9_dbg/storage/perfschema/pfs.cc:2201
#28 0x000014d33fb48609 in start_thread (arg=<optimized out>) at pthread_create.c:477
#29 0x000014d33f736293 in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95

Bug confirmed present in:
MariaDB: 10.3.33 (dbg), 10.4.23 (dbg), 10.5.14 (dbg), 10.6.6 (dbg), 10.7.2 (dbg), 10.8.1 (dbg), 10.9.0 (dbg)

Bug (or feature/syntax) confirmed not present in:
MariaDB: 10.2.42 (dbg), 10.2.42 (opt), 10.3.33 (opt), 10.4.23 (opt), 10.5.14 (opt), 10.6.6 (opt), 10.7.2 (opt), 10.8.1 (opt), 10.9.0 (opt)
MySQL: 5.5.62 (dbg), 5.5.62 (opt), 5.6.51 (dbg), 5.6.51 (opt), 5.7.36 (dbg), 5.7.36 (opt), 8.0.27 (dbg), 8.0.27 (opt)

Comment by Roel Van de Paar [ 2022-02-16 ]

All UniqueID's seen thus far

(length % 4) == 0|SIGABRT|my_lengthsp_utf32|charset_info_st::lengthsp|Column_definition::create_interval_from_interval_list|Column_definition::prepare_interval_field
(length % 4) == 0|SIGABRT|my_lengthsp_utf32|my_ci_lengthsp|my_uca_strnxfrm_utf32|charset_info_st::strnxfrm
(length % 4) == 0|SIGABRT|my_lengthsp_utf32|my_uca_strnxfrm_utf32|Type_handler_string_result::make_sort_key|make_sortkey
(length % 4) == 0|SIGABRT|my_lengthsp_utf32|Field_enum::store|Field::save_in_field_str|Field_enum::save_in_field
(length % 4) == 0|SIGABRT|my_lengthsp_utf32|charset_info_st::lengthsp|Field_enum::store|Field::save_in_field_str

Comment by Roel Van de Paar [ 2022-02-16 ]

bar A fix for this ticket would be very appreciated, thank you!

Comment by Alexander Barkov [ 2022-03-12 ]

The crash is repeatable with utf32_general_ci instead of utf32_myanmar_ci:

DROP TABLE IF EXISTS t1;
CREATE TABLE t1 (a CHAR(1));
SET COLLATION_CONNECTION=utf32_general_ci, CHARACTER_SET_CLIENT=binary;
ALTER TABLE t1 CHANGE a a ENUM('a','a') CHARACTER SET utf32;

Comment by Alexander Barkov [ 2022-03-14 ]

This problem:

SET sql_mode='';
CREATE TABLE t (HOST CHAR DEFAULT '%',USER CHAR DEFAULT '%',ROLE CHAR DEFAULT '%',ENABLED ENUM ('a','a') DEFAULT 'a',HISTORY ENUM ('a','a') DEFAULT 'a') ROW_FORMAT=DYNAMIC COLLATE=utf32_unicode_nopad_ci ENGINE=InnoDB;
INSERT INTO t SELECT * FROM t;

is now reported as a separate issue MDEV-28062.

Generated at Thu Feb 08 09:20:41 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.