[MDEV-20639] ASAN SEGV in get_prefix upon modifying base column type with existing indexed virtual column Created: 2019-09-20  Updated: 2019-09-28  Resolved: 2019-09-28

Status: Closed
Project: MariaDB Server
Component/s: Temporal Types, Virtual Columns
Affects Version/s: 10.4
Fix Version/s: 10.4.9

Type: Bug Priority: Major
Reporter: Elena Stepanova Assignee: Alexander Barkov
Resolution: Fixed Votes: 0
Labels: regression


 Description   

CREATE TABLE t1 ( 
    a TIMESTAMP,
    b TIMESTAMP AS (a) VIRTUAL,
    KEY (b)
);
ALTER TABLE t1 MODIFY a BLOB FIRST;
 
# Cleanup
DROP TABLE t1;

10.4 ASAN b9dea911

ASAN:DEADLYSIGNAL
=================================================================
==21894==ERROR: AddressSanitizer: SEGV on unknown address 0x000000000000 (pc 0x5630df985385 bp 0x7f90a7deff50 sp 0x7f90a7deff20 T5)
    #0 0x5630df985384 in get_prefix /data/src/10.4/sql-common/my_time.c:328
    #1 0x5630df9855ed in find_body /data/src/10.4/sql-common/my_time.c:357
    #2 0x5630df9882b1 in str_to_datetime_or_date /data/src/10.4/sql-common/my_time.c:880
    #3 0x5630de1b60a0 in Temporal::ascii_to_datetime_or_date(st_mysql_time_status*, char const*, unsigned long, date_mode_t) (/data/bld/10.4-asan-nightly/bin/mysqld+0x155f0a0)
    #4 0x5630de1aceda in Temporal::str_to_datetime_or_date(THD*, st_mysql_time_status*, char const*, unsigned long, charset_info_st const*, date_mode_t) /data/src/10.4/sql/sql_time.cc:393
    #5 0x5630de3a3f15 in Temporal_with_date::Temporal_with_date(THD*, st_mysql_time_status*, char const*, unsigned long, charset_info_st const*, date_mode_t) /data/src/10.4/sql/sql_type.h:1827
    #6 0x5630de3a4d21 in Datetime::Datetime(THD*, st_mysql_time_status*, char const*, unsigned long, charset_info_st const*, date_mode_t) (/data/bld/10.4-asan-nightly/bin/mysqld+0x174dd21)
    #7 0x5630de38fd86 in Type_handler_string_result::Item_temporal_precision(THD*, Item*, bool) const /data/src/10.4/sql/sql_type.cc:6343
    #8 0x5630de3aa822 in Type_handler_string_result::Item_datetime_precision(THD*, Item*) const /data/src/10.4/sql/sql_type.h:4651
    #9 0x5630de3b087c in Item::datetime_precision(THD*) /data/src/10.4/sql/item.h:1639
    #10 0x5630de5a9a0f in Field_timestamp::conversion_depends_on_sql_mode(THD*, Item*) const /data/src/10.4/sql/field.cc:5070
    #11 0x5630de58c4b8 in Field::check_vcol_sql_mode_dependency(THD*, vcol_init_mode) const /data/src/10.4/sql/field.cc:1411
    #12 0x5630de15fc48 in parse_vcol_defs(THD*, st_mem_root*, TABLE*, bool*, vcol_init_mode) /data/src/10.4/sql/table.cc:1155
    #13 0x5630de176e9b in open_table_from_share(THD*, TABLE_SHARE*, st_mysql_const_lex_string const*, unsigned int, unsigned int, unsigned int, TABLE*, bool, List<String>*) /data/src/10.4/sql/table.cc:3798
    #14 0x5630de0e9763 in create_table_for_inplace_alter /data/src/10.4/sql/sql_table.cc:9302
    #15 0x5630de0ed1dc in mysql_alter_table(THD*, st_mysql_const_lex_string const*, st_mysql_const_lex_string const*, HA_CREATE_INFO*, TABLE_LIST*, Alter_info*, unsigned int, st_order*, bool) /data/src/10.4/sql/sql_table.cc:10025
    #16 0x5630de24e1bf in Sql_cmd_alter_table::execute(THD*) /data/src/10.4/sql/sql_alter.cc:508
    #17 0x5630ddebd241 in mysql_execute_command(THD*) /data/src/10.4/sql/sql_parse.cc:6094
    #18 0x5630ddec82b2 in mysql_parse(THD*, char*, unsigned int, Parser_state*, bool, bool) /data/src/10.4/sql/sql_parse.cc:7912
    #19 0x5630dde9fa09 in dispatch_command(enum_server_command, THD*, char*, unsigned int, bool, bool) /data/src/10.4/sql/sql_parse.cc:1841
    #20 0x5630dde9c758 in do_command(THD*) /data/src/10.4/sql/sql_parse.cc:1359
    #21 0x5630de23838d in do_handle_one_connection(CONNECT*) /data/src/10.4/sql/sql_connect.cc:1412
    #22 0x5630de237d41 in handle_one_connection /data/src/10.4/sql/sql_connect.cc:1316
    #23 0x5630df81f05d in pfs_spawn_thread /data/src/10.4/storage/perfschema/pfs.cc:1862
    #24 0x7f90b26034a3 in start_thread (/lib/x86_64-linux-gnu/libpthread.so.0+0x74a3)
    #25 0x7f90b0b4bd0e in __clone (/lib/x86_64-linux-gnu/libc.so.6+0xe8d0e)
 
AddressSanitizer can not provide additional info.
SUMMARY: AddressSanitizer: SEGV /data/src/10.4/sql-common/my_time.c:328 in get_prefix
Thread T5 created by T0 here:
    #0 0x7f90b2849f59 in __interceptor_pthread_create (/usr/lib/x86_64-linux-gnu/libasan.so.3+0x30f59)
    #1 0x5630df81f44a in spawn_thread_v1 /data/src/10.4/storage/perfschema/pfs.cc:1912
    #2 0x5630ddbdf5e8 in inline_mysql_thread_create /data/src/10.4/include/mysql/psi/mysql_thread.h:1268
    #3 0x5630ddbf444f in create_thread_to_handle_connection(CONNECT*) /data/src/10.4/sql/mysqld.cc:6240
    #4 0x5630ddbf4b32 in create_new_thread(CONNECT*) /data/src/10.4/sql/mysqld.cc:6310
    #5 0x5630ddbf4ebd in handle_accepted_socket(st_mysql_socket, st_mysql_socket) /data/src/10.4/sql/mysqld.cc:6408
    #6 0x5630ddbf5b0f in handle_connections_sockets() /data/src/10.4/sql/mysqld.cc:6566
    #7 0x5630ddbf3cd0 in mysqld_main(int, char**) /data/src/10.4/sql/mysqld.cc:5898
    #8 0x5630ddbdd4cf in main /data/src/10.4/sql/main.cc:25
    #9 0x7f90b0a832e0 in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x202e0)
 
==21894==ABORTING

Non-ASAN build doesn't crash, but possibly it's just the matter of luck.

The failure appeared in 10.4 tree after this commit:

commit c924e39fab54ed63a427c27d39778eacd961764b
Author: Alexander Barkov
Date:   Fri Sep 13 11:04:23 2019 +0400
 
    MDEV-18153 Assertion `0' or Assertion `btr_validate_index(index, 0)' failed in row_upd_sec_index_entry or error code 126: Index is corrupted upon UPDATE with TIME_ROUND_FRACTIONAL


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