[MDEV-29163] Server crash with SIGSEGV or dynamic-stack-buffer-overflow in spider_db_mbase_util::append_table Created: 2022-07-24  Updated: 2023-11-17  Resolved: 2023-11-17

Status: Closed
Project: MariaDB Server
Component/s: Storage Engine - Spider
Affects Version/s: 10.3, 10.4, 10.5, 10.6, 10.7, 10.8, 10.9, 10.10, 11.1
Fix Version/s: 10.4.33, 10.5.24, 10.6.17, 10.11.7, 11.0.5, 11.1.4, 11.2.3

Type: Bug Priority: Critical
Reporter: Nayuta Yanagisawa (Inactive) Assignee: Yuchen Pei
Resolution: Fixed Votes: 1
Labels: spider-gbh

Issue Links:
Blocks
is blocked by MDEV-26247 Spider: Valid LEFT JOIN results in ER... Closed
PartOf
is part of MDEV-26247 Spider: Valid LEFT JOIN results in ER... Closed
Relates
relates to MDEV-32238 Add a switch to disable spider group ... Closed

 Description   

NOTE: The same test case but without primary key on t3_spider causes a syntax error.

--source plugin/spider/spider/include/init_spider.inc
 
SET spider_same_server_link= on;
eval create server s foreign data wrapper mysql options (host "127.0.0.1", database "test", user "root", port $MASTER_MYPORT);
 
CREATE TABLE t1 (a INT);
CREATE TABLE t2 (b INT);
CREATE TABLE t3 (c INT, PRIMARY KEY(c));
 
CREATE TABLE t1_spider (a INT) ENGINE=SPIDER COMMENT = "wrapper 'mysql', srv 's', table 't1'";
CREATE TABLE t2_spider (b INT) ENGINE=SPIDER COMMENT = "wrapper 'mysql', srv 's', table 't2'";
CREATE TABLE t3_spider (c INT, PRIMARY KEY(c)) ENGINE=SPIDER COMMENT = "wrapper 'mysql', srv 's', table 't3'";
 
SELECT t1_spider.* FROM t1_spider LEFT JOIN t2_spider LEFT JOIN t3_spider ON b = c ON a = b;
 
# Cleanup
DROP TABLE t1_spider, t2_spider, t3_spider, t1, t2, t3;
 
--source plugin/spider/spider/include/deinit_spider.inc

10.3 d6e80c21

#2  0x000055d328afb26a in handle_fatal_signal (sig=11) at /data/src/10.3/sql/signal_handler.cc:365
        curr_time = 1657238605
        tm = {tm_sec = 25, tm_min = 3, tm_hour = 3, tm_mday = 8, tm_mon = 6, tm_year = 122, tm_wday = 5, tm_yday = 188, tm_isdst = 1, tm_gmtoff = 10800, tm_zone = 0x55d32a909fe0 "EEST"}
        thd = 0x7fc4b0000d90
        print_invalid_query_pointer = false
#3  <signal handler called>
No locals.
#4  0x00007fc4c15c62ae in spider_db_mbase_util::append_table (this=0x7fc4c16564d0 <spider_db_mysql_utility>, spider=0x7fc4b00bb4a8, fields=0x7fc4b01059b0, str=0x7fc4b00c9188, table_list=0x7fc4b0013af8, used_table_list=0x7fc4c169f360, current_pos=0x7fc4c169f3bc, cond_table_list_ptr=0x7fc4c169f3d0, top_down=true, first=true) at /data/src/10.3/storage/spider/spd_db_mysql.cc:5569
        on_expr = 0x55d329392da5 <code_state+167>
        error_num = 32708
        use_cond_table_list = false
        db_share = 0x55d3286c526a <String::q_append(char const*, unsigned long)+66>
        dbton_hdl = 0x7fc4c1615f1e
        table_holder = 0x0
        cond_table_list = 0x0
        spd = 0x7fc4c169f050
        _db_stack_frame_ = {func = 0x7fc4c161e050 "spider_db_mbase_util::append_tables_top_down", file = 0x7fc4c161b2d8 "/data/src/10.3/storage/spider/spd_db_mysql.cc", level = 2147483664, line = -1, prev = 0x7fc4c169f130}
#5  0x00007fc4c15c6b63 in spider_db_mbase_util::append_tables_top_down (this=0x7fc4c16564d0 <spider_db_mysql_utility>, spider=0x7fc4b00bb4a8, fields=0x7fc4b01059b0, str=0x7fc4b00c9188, table_list=0x7fc4b0014568, used_table_list=0x7fc4c169f360, current_pos=0x7fc4c169f3bc, cond_table_list_ptr=0x7fc4c169f3d0) at /data/src/10.3/storage/spider/spd_db_mysql.cc:5732
        error_num = 691468691
        outer_join_backup = 21971
        cur_table_list = 0x7fc4b0013af8
        prev_table_list = 0x0
        cond_table_list = 0x7fc4b0014568
        first = true
        _db_stack_frame_ = {func = 0x7fc4c161e160 "spider_db_mbase_util::append_embedding_tables", file = 0x7fc4c161b2d8 "/data/src/10.3/storage/spider/spd_db_mysql.cc", level = 2147483663, line = -1, prev = 0x7fc4c169f200}
        __PRETTY_FUNCTION__ = "int spider_db_mbase_util::append_tables_top_down(ha_spider*, spider_fields*, spider_string*, TABLE_LIST*, TABLE_LIST**, uint*, TABLE_LIST**)"
        it1 = {<base_list_iterator> = {list = 0x7fc4b0014bc8, el = 0x7fc4b0014c38, prev = 0x0, current = 0x0}, <No data fields>}
#6  0x00007fc4c15c753a in spider_db_mbase_util::append_embedding_tables (this=0x7fc4c16564d0 <spider_db_mysql_utility>, spider=0x7fc4b00bb4a8, fields=0x7fc4b01059b0, str=0x7fc4b00c9188, table_list=0x7fc4b0014568, used_table_list=0x7fc4c169f360, current_pos=0x7fc4c169f3bc, cond_table_list_ptr=0x7fc4c169f3d0) at /data/src/10.3/storage/spider/spd_db_mysql.cc:5885
        error_num = 32708
        embedding = 0x0
        _db_stack_frame_ = {func = 0x7fc4c161df18 "spider_db_mbase_util::append_table", file = 0x7fc4c161b2d8 "/data/src/10.3/storage/spider/spd_db_mysql.cc", level = 2147483662, line = -1, prev = 0x7fc4c169f2e0}
        __PRETTY_FUNCTION__ = "int spider_db_mbase_util::append_embedding_tables(ha_spider*, spider_fields*, spider_string*, TABLE_LIST*, TABLE_LIST**, uint*, TABLE_LIST**)"
#7  0x00007fc4c15c5e6b in spider_db_mbase_util::append_table (this=0x7fc4c16564d0 <spider_db_mysql_utility>, spider=0x7fc4b00bb4a8, fields=0x7fc4b01059b0, str=0x7fc4b00c9188, table_list=0x7fc4b0013438, used_table_list=0x7fc4c169f360, current_pos=0x7fc4c169f3bc, cond_table_list_ptr=0x7fc4c169f3d0, top_down=false, first=false) at /data/src/10.3/storage/spider/spd_db_mysql.cc:5475
        error_num = 0
        use_cond_table_list = false
        db_share = 0x7fc4b00c0aa0
        dbton_hdl = 0x7fc4b00c9130
        table_holder = 0x7fc4b01a8a20
        cond_table_list = 0x0
        spd = 0x7fc4b00bb4a8
        _db_stack_frame_ = {func = 0x7fc4c161e2c0 "spider_db_mbase_util::append_from_and_tables", file = 0x7fc4c161b2d8 "/data/src/10.3/storage/spider/spd_db_mysql.cc", level = 2147483661, line = -1, prev = 0x7fc4c169f3f0}
#8  0x00007fc4c15c77a7 in spider_db_mbase_util::append_from_and_tables (this=0x7fc4c16564d0 <spider_db_mysql_utility>, spider=0x7fc4b00bb4a8, fields=0x7fc4b01059b0, str=0x7fc4b00c9188, table_list=0x7fc4b0013438, table_count=2) at /data/src/10.3/storage/spider/spd_db_mysql.cc:5939
        error_num = 0
        current_pos = 1
        roop_count = 1
        backup_pos = 1
        outer_join_backup = 32708
        table = 0x7fc4b0100970
        used_table_list = 0x7fc4c169f360
        prev_table_list = 0x0
        cond_table_list = 0x0
        _db_stack_frame_ = {func = 0x7fc4c1622830 "spider_mbase_handler::append_from_and_tables_part", file = 0x7fc4c161b2d8 "/data/src/10.3/storage/spider/spd_db_mysql.cc", level = 2147483660, line = -1, prev = 0x7fc4c169f480}
#9  0x00007fc4c15f2b1b in spider_mbase_handler::append_from_and_tables_part (this=0x7fc4b00c9130, fields=0x7fc4b01059b0, sql_type=1) at /data/src/10.3/storage/spider/spd_db_mysql.cc:14247
        error_num = 0
        str = 0x7fc4b00c9188
        table_holder = 0x7fc4b01a8a20
        table_list = 0x7fc4b0012d78
        _db_stack_frame_ = {func = 0x7fc4c1623da0 "spider_group_by_handler::init_scan", file = 0x7fc4c1623198 "/data/src/10.3/storage/spider/spd_group_by_handler.cc", level = 2147483659, line = -1, prev = 0x7fc4c169f530}
#10 0x00007fc4c15fbc45 in spider_group_by_handler::init_scan (this=0x7fc4b01a8eb0) at /data/src/10.3/storage/spider/spd_group_by_handler.cc:1321
        error_num = 0
        link_idx = 1
        dbton_id = 0
        dbton_hdl = 0x7fc4b00c9130
        select_lex = 0x7fc4b00053d8
        select_limit = 9223372036854775807
        direct_order_limit = 9223372036854775807
        share = 0x7fc4b00bd1a0
        conn = 0x55d3293951dc <_db_enter_+282>
        result_list = 0x7fc4b00bb9f8
        link_idx_chain = 0x7fc4c169f560
        link_idx_holder = 0x7fc4c169f5c0
        _db_stack_frame_ = {func = 0x55d329429907 "Pushdown_query::execute", file = 0x55d3294298e0 "/data/src/10.3/sql/group_by_handler.cc", level = 2147483658, line = -1, prev = 0x7fc4c169f5c0}
        field = 0x7fc4b01aa0d8
        __PRETTY_FUNCTION__ = "virtual int spider_group_by_handler::init_scan()"
#11 0x000055d32889bcdf in Pushdown_query::execute (this=0x7fc4b01a6bf8, join=0x7fc4b0015a90) at /data/src/10.3/sql/group_by_handler.cc:49
        err = -1342174000
        max_limit = 140482743196304
        reset_limit = 0x0
        reset_item = 0x0
        thd = 0x7fc4b0000d90
        table = 0x7fc4b01a8fd8
        _db_stack_frame_ = {func = 0x55d329421220 "do_select", file = 0x55d32941e5c0 "/data/src/10.3/sql/sql_select.cc", level = 2147483657, line = -1, prev = 0x7fc4c169f660}
#12 0x000055d328853f35 in do_select (join=0x7fc4b0015a90, procedure=0x0) at /data/src/10.3/sql/sql_select.cc:19331
        res = 21971
        rc = 0
        error = NESTED_LOOP_OK
        _db_stack_frame_ = {func = 0x55d32941f2e1 "JOIN::exec_inner", file = 0x55d32941e5c0 "/data/src/10.3/sql/sql_select.cc", level = 2147483656, line = -1, prev = 0x7fc4c169f6c0}
        __PRETTY_FUNCTION__ = "int do_select(JOIN*, Procedure*)"
#13 0x000055d32882b14b in JOIN::exec_inner (this=0x7fc4b0015a90) at /data/src/10.3/sql/sql_select.cc:4151
        columns_list = 0x7fc4b0005500
        _db_stack_frame_ = {func = 0x55d32941f396 "mysql_select", file = 0x55d32941e5c0 "/data/src/10.3/sql/sql_select.cc", level = 2147483655, line = -1, prev = 0x7fc4c169f7a0}
        __PRETTY_FUNCTION__ = "void JOIN::exec_inner()"
#14 0x000055d32882a50e in JOIN::exec (this=0x7fc4b0015a90) at /data/src/10.3/sql/sql_select.cc:3945
No locals.
#15 0x000055d32882b837 in mysql_select (thd=0x7fc4b0000d90, tables=0x7fc4b0012d78, wild_num=1, fields=@0x7fc4b0005500: {<base_list> = {<Sql_alloc> = {<No data fields>}, first = 0x7fc4b0012d20, last = 0x7fc4b0012d20, elements = 1}, <No data fields>}, conds=0x0, og_num=0, order=0x0, group=0x0, having=0x0, proc_param=0x0, select_options=2147748608, result=0x7fc4b0015a68, unit=0x7fc4b0004c40, select_lex=0x7fc4b00053d8) at /data/src/10.3/sql/sql_select.cc:4354
        err = 0
        free_join = true
        _db_stack_frame_ = {func = 0x55d32941e5fd "handle_select", file = 0x55d32941e5c0 "/data/src/10.3/sql/sql_select.cc", level = 2147483654, line = -1, prev = 0x7fc4c169f860}
        join = 0x7fc4b0015a90
#16 0x000055d32881cdad in handle_select (thd=0x7fc4b0000d90, lex=0x7fc4b0004b80, result=0x7fc4b0015a68, setup_tables_done_option=0) at /data/src/10.3/sql/sql_select.cc:372
        unit = 0x7fc4b0004c40
        res = false
        select_lex = 0x7fc4b00053d8
        _db_stack_frame_ = {func = 0x55d3294132c8 "mysql_execute_command", file = 0x55d3294126a8 "/data/src/10.3/sql/sql_parse.cc", level = 2147483653, line = -1, prev = 0x7fc4c169fed0}
#17 0x000055d3287e3d90 in execute_sqlcom_select (thd=0x7fc4b0000d90, all_tables=0x7fc4b0012d78) at /data/src/10.3/sql/sql_parse.cc:6339
        save_protocol = 0x0
        lex = 0x7fc4b0004b80
        result = 0x7fc4b0015a68
        res = false
        __PRETTY_FUNCTION__ = "bool execute_sqlcom_select(THD*, TABLE_LIST*)"
#18 0x000055d3287da798 in mysql_execute_command (thd=0x7fc4b0000d90) at /data/src/10.3/sql/sql_parse.cc:3870
        privileges_requested = 1
        res = 0
        up_result = 0
        lex = 0x7fc4b0004b80
        select_lex = 0x7fc4b00053d8
        first_table = 0x7fc4b0012d78
        all_tables = 0x7fc4b0012d78
        unit = 0x7fc4b0004c40
        have_table_map_for_update = false
        rpl_filter = 0x388293951dc
        _db_stack_frame_ = {func = 0x55d3294145a0 "mysql_parse", file = 0x55d3294126a8 "/data/src/10.3/sql/sql_parse.cc", level = 2147483652, line = -1, prev = 0x7fc4c16a0400}
        __PRETTY_FUNCTION__ = "int mysql_execute_command(THD*)"
        orig_binlog_format = BINLOG_FORMAT_MIXED
        orig_current_stmt_binlog_format = BINLOG_FORMAT_STMT
#19 0x000055d3287e8090 in mysql_parse (thd=0x7fc4b0000d90, rawbuf=0x7fc4b0012ad8 "SELECT t1_spider.* FROM t1_spider LEFT JOIN t2_spider LEFT JOIN t3_spider ON b = c ON a = b", length=91, parser_state=0x7fc4c16a05b0, is_com_multi=false, is_next_command=false) at /data/src/10.3/sql/sql_parse.cc:7870
        found_semicolon = 0x0
        error = 32708
        lex = 0x7fc4b0004b80
        err = false
        _db_stack_frame_ = {func = 0x55d329412b32 "dispatch_command", file = 0x55d3294126a8 "/data/src/10.3/sql/sql_parse.cc", level = 2147483651, line = -1, prev = 0x7fc4c16a0590}
        __PRETTY_FUNCTION__ = "void mysql_parse(THD*, char*, uint, Parser_state*, bool, bool)"
#20 0x000055d3287d48c5 in dispatch_command (command=COM_QUERY, thd=0x7fc4b0000d90, packet=0x7fc4b0008f31 "", packet_length=91, is_com_multi=false, is_next_command=false) at /data/src/10.3/sql/sql_parse.cc:1852
        packet_end = 0x7fc4b0012b33 ""
        parser_state = {m_lip = {lookahead_token = -1, lookahead_yylval = 0x0, m_thd = 0x7fc4b0000d90, m_ptr = 0x7fc4b0012b34 "\004", m_tok_start = 0x7fc4b0012b34 "\004", m_tok_end = 0x7fc4b0012b34 "\004", m_end_of_query = 0x7fc4b0012b33 "", m_tok_start_prev = 0x7fc4b0012b33 "", m_buf = 0x7fc4b0012ad8 "SELECT t1_spider.* FROM t1_spider LEFT JOIN t2_spider LEFT JOIN t3_spider ON b = c ON a = b", m_buf_length = 91, m_echo = true, m_echo_saved = 12, m_cpp_buf = 0x7fc4b0012b90 "SELECT t1_spider.* FROM t1_spider LEFT JOIN t2_spider LEFT JOIN t3_spider ON b = c ON a = b", m_cpp_ptr = 0x7fc4b0012beb "", m_cpp_tok_start = 0x7fc4b0012beb "", m_cpp_tok_start_prev = 0x7fc4b0012beb "", m_cpp_tok_end = 0x7fc4b0012beb "", m_body_utf8 = 0x0, m_body_utf8_ptr = 0x100002936f993 <error: Cannot access memory at address 0x100002936f993>, m_cpp_utf8_processed_ptr = 0x0, next_state = MY_LEX_END, found_semicolon = 0x0, ignore_space = false, stmt_prepare_mode = false, multi_statements = true, yylineno = 1, m_digest = 0x0, in_comment = NO_COMMENT, in_comment_saved = PRESERVE_COMMENT, m_cpp_text_start = 0x7fc4b0012bea "b", m_cpp_text_end = 0x7fc4b0012beb "", m_underscore_cs = 0x0}, m_yacc = {yacc_yyss = 0x0, yacc_yyvs = 0x0, m_set_signal_info = {m_item = {0x0 <repeats 12 times>}}, m_lock_type = TL_READ_DEFAULT, m_mdl_type = MDL_SHARED_READ}, m_digest_psi = 0x7fc4b0004658}
        net = 0x7fc4b0001098
        error = false
        do_end_of_statement = true
        _db_stack_frame_ = {func = 0x55d3294128bd "do_command", file = 0x55d3294126a8 "/data/src/10.3/sql/sql_parse.cc", level = 2147483650, line = -1, prev = 0x7fc4c16a0df0}
        drop_more_results = false
        __PRETTY_FUNCTION__ = "bool dispatch_command(enum_server_command, THD*, char*, uint, bool, bool)"
        res = <optimized out>
#21 0x000055d3287d3283 in do_command (thd=0x7fc4b0000d90) at /data/src/10.3/sql/sql_parse.cc:1398
        return_value = false
        packet = 0x7fc4b0008f30 "\001"
        packet_length = 92
        net = 0x7fc4b0001098
        command = COM_QUERY
        _db_stack_frame_ = {func = 0x55d3297947d0 "?func", file = 0x55d3297947d6 "?file", level = 2147483649, line = -1, prev = 0x0}
        __PRETTY_FUNCTION__ = "bool do_command(THD*)"
#22 0x000055d328950878 in do_handle_one_connection (connect=0x55d32aadc170) at /data/src/10.3/sql/sql_connect.cc:1403
        create_user = true
        thr_create_utime = 3660717642552
        thd = 0x7fc4b0000d90
#23 0x000055d3289505e3 in handle_one_connection (arg=0x55d32aadc170) at /data/src/10.3/sql/sql_connect.cc:1308
        connect = 0x55d32aadc170
#24 0x000055d3292ffb62 in pfs_spawn_thread (arg=0x55d32abdca40) at /data/src/10.3/storage/perfschema/pfs.cc:1869
        typed_arg = 0x55d32abdca40
        user_arg = 0x55d32aadc170
        user_start_routine = 0x55d3289505b3 <handle_one_connection(void*)>
        pfs = 0x7fc4c59706c0
        klass = 0x55d32a8cf280
#25 0x00007fc4c7812ea7 in start_thread (arg=<optimized out>) at pthread_create.c:477
        ret = <optimized out>
        pd = <optimized out>
        unwind_buf = {cancel_jmp_buf = {{jmp_buf = {140483035272960, -5235067572857094810, 140727913514734, 140727913514735, 140483035271104, 311296, 5246921248254967142, 5246907717992693094}, mask_was_saved = 0}}, priv = {pad = {0x0, 0x0, 0x0, 0x0}, data = {prev = 0x0, cleanup = 0x0, canceltype = 0}}}
        not_first_call = 0
#26 0x00007fc4c7742def in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95

dynamic-stack-buffer-overflow with ASAN build:

10.3 95989e82

==1903137==ERROR: AddressSanitizer: dynamic-stack-buffer-overflow on address 0x7f54cd4180b0 at pc 0x7f54ccde385f bp 0x7f54cd417b40 sp 0x7f54cd417b30
WRITE of size 8 at 0x7f54cd4180b0 thread T28
    #0 0x7f54ccde385e in spider_db_mbase_util::append_table(ha_spider*, spider_fields*, spider_string*, TABLE_LIST*, TABLE_LIST**, unsigned int*, TABLE_LIST**, bool, bool) /home/nayuta_mariadb/repo/mariadb-server/10.3/storage/spider/spd_db_mysql.cc:5595
    #1 0x7f54ccde43e1 in spider_db_mbase_util::append_tables_top_down(ha_spider*, spider_fields*, spider_string*, TABLE_LIST*, TABLE_LIST**, unsigned int*, TABLE_LIST**) /home/nayuta_mariadb/repo/mariadb-server/10.3/storage/spider/spd_db_mysql.cc:5732
    #2 0x7f54ccde535a in spider_db_mbase_util::append_embedding_tables(ha_spider*, spider_fields*, spider_string*, TABLE_LIST*, TABLE_LIST**, unsigned int*, TABLE_LIST**) /home/nayuta_mariadb/repo/mariadb-server/10.3/storage/spider/spd_db_mysql.cc:5885
    #3 0x7f54ccde2cfc in spider_db_mbase_util::append_table(ha_spider*, spider_fields*, spider_string*, TABLE_LIST*, TABLE_LIST**, unsigned int*, TABLE_LIST**, bool, bool) /home/nayuta_mariadb/repo/mariadb-server/10.3/storage/spider/spd_db_mysql.cc:5475
    #4 0x7f54ccde582b in spider_db_mbase_util::append_from_and_tables(ha_spider*, spider_fields*, spider_string*, TABLE_LIST*, unsigned int) /home/nayuta_mariadb/repo/mariadb-server/10.3/storage/spider/spd_db_mysql.cc:5939
    #5 0x7f54cce4f2f7 in spider_create_group_by_handler(THD*, Query*) /home/nayuta_mariadb/repo/mariadb-server/10.3/storage/spider/spd_group_by_handler.cc:1813
    #6 0x564ca27f513b in JOIN::make_aggr_tables_info() /home/nayuta_mariadb/repo/mariadb-server/10.3/sql/sql_select.cc:2924
    #7 0x564ca27f2bb8 in JOIN::optimize_stage2() /home/nayuta_mariadb/repo/mariadb-server/10.3/sql/sql_select.cc:2694
    #8 0x564ca27ec168 in JOIN::optimize_inner() /home/nayuta_mariadb/repo/mariadb-server/10.3/sql/sql_select.cc:2000
    #9 0x564ca27e7a16 in JOIN::optimize() /home/nayuta_mariadb/repo/mariadb-server/10.3/sql/sql_select.cc:1519
    #10 0x564ca2801ed0 in mysql_select(THD*, TABLE_LIST*, unsigned int, List<Item>&, Item*, unsigned int, st_order*, st_order*, Item*, st_order*, unsigned long long, select_result*, st_select_lex_unit*, st_select_lex*) /home/nayuta_mariadb/repo/mariadb-server/10.3/sql/sql_select.cc:4337
    #11 0x564ca27dc41d in handle_select(THD*, LEX*, select_result*, unsigned long) /home/nayuta_mariadb/repo/mariadb-server/10.3/sql/sql_select.cc:372
    #12 0x564ca2761a6e in execute_sqlcom_select /home/nayuta_mariadb/repo/mariadb-server/10.3/sql/sql_parse.cc:6339
    #13 0x564ca274fb65 in mysql_execute_command(THD*) /home/nayuta_mariadb/repo/mariadb-server/10.3/sql/sql_parse.cc:3870
    #14 0x564ca276a786 in mysql_parse(THD*, char*, unsigned int, Parser_state*, bool, bool) /home/nayuta_mariadb/repo/mariadb-server/10.3/sql/sql_parse.cc:7870
    #15 0x564ca274313e in dispatch_command(enum_server_command, THD*, char*, unsigned int, bool, bool) /home/nayuta_mariadb/repo/mariadb-server/10.3/sql/sql_parse.cc:1852
    #16 0x564ca2740411 in do_command(THD*) /home/nayuta_mariadb/repo/mariadb-server/10.3/sql/sql_parse.cc:1398
    #17 0x564ca2ab7adc in do_handle_one_connection(CONNECT*) /home/nayuta_mariadb/repo/mariadb-server/10.3/sql/sql_connect.cc:1403
    #18 0x564ca2ab73ca in handle_one_connection /home/nayuta_mariadb/repo/mariadb-server/10.3/sql/sql_connect.cc:1308
    #19 0x7f54e4a24b42  (/lib/x86_64-linux-gnu/libc.so.6+0x94b42)
    #20 0x7f54e4ab5bb3 in __clone (/lib/x86_64-linux-gnu/libc.so.6+0x125bb3)
 
Address 0x7f54cd4180b0 is located in stack of thread T28 at offset 288 in frame
    #0 0x7f54ccde2957 in spider_db_mbase_util::append_table(ha_spider*, spider_fields*, spider_string*, TABLE_LIST*, TABLE_LIST**, unsigned int*, TABLE_LIST**, bool, bool) /home/nayuta_mariadb/repo/mariadb-server/10.3/storage/spider/spd_db_mysql.cc:5455
 
  This frame has 1 object(s):
    [32, 64) 'it2' (line 5614) <== Memory access at offset 288 overflows this variable
HINT: this may be a false positive if your program uses some custom stack unwind mechanism, swapcontext or vfork
      (longjmp and C++ exceptions *are* supported)
Thread T28 created by T0 here:
    #0 0x7f54e5128685 in __interceptor_pthread_create ../../../../src/libsanitizer/asan/asan_interceptors.cpp:216
    #1 0x564ca24cc7df in create_thread_to_handle_connection(CONNECT*) /home/nayuta_mariadb/repo/mariadb-server/10.3/sql/mysqld.cc:6668
    #2 0x564ca24ccdae in create_new_thread /home/nayuta_mariadb/repo/mariadb-server/10.3/sql/mysqld.cc:6738
    #3 0x564ca24cde14 in handle_connections_sockets() /home/nayuta_mariadb/repo/mariadb-server/10.3/sql/mysqld.cc:6996
    #4 0x564ca24cbf92 in mysqld_main(int, char**) /home/nayuta_mariadb/repo/mariadb-server/10.3/sql/mysqld.cc:6290
    #5 0x564ca24b9d9c in main /home/nayuta_mariadb/repo/mariadb-server/10.3/sql/main.cc:25
    #6 0x7f54e49b9d8f  (/lib/x86_64-linux-gnu/libc.so.6+0x29d8f)
 
SUMMARY: AddressSanitizer: dynamic-stack-buffer-overflow /home/nayuta_mariadb/repo/mariadb-server/10.3/storage/spider/spd_db_mysql.cc:5595 in spider_db_mbase_util::append_table(ha_spider*, spider_fields*, spider_string*, TABLE_LIST*, TABLE_LIST**, unsigned int*, TABLE_LIST**, bool, bool)
Shadow bytes around the buggy address:
  0x0feb19a7afc0: f3 f3 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x0feb19a7afd0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x0feb19a7afe0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x0feb19a7aff0: 00 00 f1 f1 f1 f1 00 00 00 00 f3 f3 f3 f3 00 00
  0x0feb19a7b000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
=>0x0feb19a7b010: ca ca ca ca 00 00[cb]cb cb cb cb cb 00 00 00 00
  0x0feb19a7b020: 00 00 00 00 00 00 00 00 00 00 f1 f1 f1 f1 f1 f1
  0x0feb19a7b030: 04 f2 00 f3 f3 f3 00 00 00 00 00 00 00 00 00 00
  0x0feb19a7b040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x0feb19a7b050: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x0feb19a7b060: 00 00 00 00 f1 f1 f1 f1 f1 f1 00 00 00 00 f2 f2
Shadow byte legend (one shadow byte represents 8 application bytes):
  Addressable:           00
  Partially addressable: 01 02 03 04 05 06 07 
  Heap left redzone:       fa
  Freed heap region:       fd
  Stack left redzone:      f1
  Stack mid redzone:       f2
  Stack right redzone:     f3
  Stack after return:      f5
  Stack use after scope:   f8
  Global redzone:          f9
  Global init order:       f6
  Poisoned by user:        f7
  Container overflow:      fc
  Array cookie:            ac
  Intra object redzone:    bb
  ASan internal:           fe
  Left alloca redzone:     ca
  Right alloca redzone:    cb
  Shadow gap:              cc
==1903137==ABORTING



 Comments   
Comment by Nayuta Yanagisawa (Inactive) [ 2022-07-24 ]

--echo #
--echo # MDEV-29163 Server crash with SIGSEGV or dynamic-stack-buffer-overflow in spider_db_mbase_util::append_table
--echo #
 
--disable_query_log
--disable_result_log
--source ../../t/test_init.inc
--enable_result_log
--enable_query_log
 
--connection child2_1
CREATE DATABASE auto_test_remote;
USE auto_test_remote;
 
eval CREATE TABLE tbl_a (
    a INT
) $CHILD2_1_ENGINE $CHILD2_1_CHARSET;
eval CREATE TABLE tbl_b (
    b INT
) $CHILD2_1_ENGINE $CHILD2_1_CHARSET;
eval CREATE TABLE tbl_c (
    c INT, PRIMARY KEY(c)
) $CHILD2_1_ENGINE $CHILD2_1_CHARSET;
 
--connection master_1
CREATE DATABASE auto_test_local;
USE auto_test_local;
 
eval CREATE TABLE tbl_a (
    a INT
) $MASTER_1_ENGINE $MASTER_1_CHARSET COMMENT='table "tbl_a", srv "s_2_1"';
eval CREATE TABLE tbl_b (
    b INT
) $MASTER_1_ENGINE $MASTER_1_CHARSET COMMENT='table "tbl_a", srv "s_2_1"';
eval CREATE TABLE tbl_c (
    c INT, PRIMARY KEY(c)
) $MASTER_1_ENGINE $MASTER_1_CHARSET COMMENT='table "tbl_a", srv "s_2_1"';
 
SELECT tbl_a.* FROM tbl_a LEFT JOIN tbl_b LEFT JOIN tbl_c ON b = c ON a = b;
 
--connection master_1
DROP DATABASE auto_test_local;
 
--connection child2_1
DROP DATABASE auto_test_remote;
 
--disable_query_log
--disable_result_log
--source ../t/test_deinit.inc
--enable_query_log
--enable_result_log

Comment by Nayuta Yanagisawa (Inactive) [ 2022-07-24 ]

ASAN build crashes in spider_create_group_by_handler() and DBUG build crashes much later.

Comment by Nayuta Yanagisawa (Inactive) [ 2022-07-24 ]

The table elimination seems to cause the problem. The table elimination implementation can be found in opt_table_elimination.cc.

Comment by Nayuta Yanagisawa (Inactive) [ 2022-07-24 ]

SET optimizer_switch='table_elimination=off' prevents the crash and the following query is generated by Spider's GBH (syntax error):

select t0.`a` `a` from `auto_test_remote`.`tbl_a` t0 left join ( left join `auto_test_remote`.`tbl_a` t2 on ((t2.`c` = t0.`a`) and (t0.`a` is not null)) join `auto_test_remote`.`tbl_a` t1) on (t1.`b` = t0.`a`) where 1

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

Ran into this also.

INSTALL PLUGIN Spider SONAME 'ha_spider.so';
CREATE USER Spider@localhost IDENTIFIED BY 'PWD1';
CREATE SERVER srv FOREIGN DATA WRAPPER MYSQL OPTIONS (SOCKET '../socket.sock',DATABASE 'test',user 'Spider',PASSWORD 'PWD1');
CREATE TABLE t (c INT);
CREATE TABLE t1 (a CHAR(1) KEY) ENGINE=Spider COMMENT='WRAPPER "mysql",srv "srv",TABLE "t"';
SELECT * FROM t1 LEFT JOIN (t1 AS t2 LEFT JOIN t1 AS d USING (a)) ON t1.a>1;

Leads to:

10.11.0 bc563f1a4b0b38de3b41fd0f0d3d8b7f1aacbd8b (Optimized)

Core was generated by `/test/MD190822-mariadb-10.11.0-linux-x86_64-opt/bin/mysqld --no-defaults --core'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0  0x000014ca469abe5a in spider_db_mbase_util::append_table (
    this=0x14ca469f5ae0 <spider_db_mysql_utility>, spider=0x14c9fc03d750, 
    fields=0x14c9fc0277a0, str=0x14c9fc063180, table_list=0x14c9fc011c60, 
    used_table_list=0x14ca540953e0, current_pos=0x14ca5409543c, 
    cond_table_list_ptr=0x14ca54095440, top_down=true, first=true)
    at /test/10.11_opt/storage/spider/spd_db_mysql.cc:7011
[Current thread is 1 (Thread 0x14ca54097700 (LWP 3715241))]
(gdb) bt
#0  0x000014ca469abe5a in spider_db_mbase_util::append_table (this=0x14ca469f5ae0 <spider_db_mysql_utility>, spider=0x14c9fc03d750, fields=0x14c9fc0277a0, str=0x14c9fc063180, table_list=0x14c9fc011c60, used_table_list=0x14ca540953e0, current_pos=0x14ca5409543c, cond_table_list_ptr=0x14ca54095440, top_down=true, first=true) at /test/10.11_opt/storage/spider/spd_db_mysql.cc:7011
#1  0x000014ca469ac3b0 in spider_db_mbase_util::append_tables_top_down (this=0x14ca469f5ae0 <spider_db_mysql_utility>, spider=0x14c9fc03d750, fields=0x14c9fc0277a0, str=0x14c9fc063180, table_list=<optimized out>, used_table_list=0x14ca540953e0, current_pos=0x14ca5409543c, cond_table_list_ptr=0x14ca54095440) at /test/10.11_opt/storage/spider/spd_db_mysql.cc:7174
#2  0x000014ca469aca16 in spider_db_mbase_util::append_from_and_tables (this=<optimized out>, spider=<optimized out>, fields=0x14c9fc0277a0, str=<optimized out>, table_list=0x14c9fc011528, table_count=<optimized out>) at /test/10.11_opt/storage/spider/spd_db_mysql.cc:7381
#3  0x000014ca469bd719 in spider_group_by_handler::init_scan (this=0x561ba3c9d760) at /test/10.11_opt/storage/spider/spd_group_by_handler.cc:1306
#4  0x0000561ba07b367d in Pushdown_query::execute (this=0x14c9fc0977e0, join=join@entry=0x14c9fc093870) at /test/10.11_opt/sql/group_by_handler.cc:49
#5  0x0000561ba07955d5 in do_select (procedure=<optimized out>, join=0x14c9fc093870) at /test/10.11_opt/sql/sql_select.cc:21206
#6  JOIN::exec_inner (this=0x14c9fc093870) at /test/10.11_opt/sql/sql_select.cc:4812
#7  0x0000561ba0795f68 in JOIN::exec (this=this@entry=0x14c9fc093870) at /test/10.11_opt/sql/sql_select.cc:4590
#8  0x0000561ba0794171 in mysql_select (thd=0x14c9fc000c58, tables=0x14c9fc010df0, fields=@0x14c9fc010ab8: {<base_list> = {<Sql_alloc> = {<No data fields>}, first = 0x14c9fc010da8, last = 0x14c9fc0146c8, elements = 2}, <No data fields>}, conds=0x0, og_num=0, order=0x0, group=0x0, having=0x0, proc_param=0x0, select_options=<optimized out>, result=0x14c9fc014160, unit=0x14c9fc004cd0, select_lex=0x14c9fc010818) at /test/10.11_opt/sql/sql_select.cc:5070
#9  0x0000561ba07948b7 in handle_select (thd=thd@entry=0x14c9fc000c58, lex=lex@entry=0x14c9fc004bf8, result=result@entry=0x14c9fc014160, setup_tables_done_option=setup_tables_done_option@entry=0) at /test/10.11_opt/sql/sql_select.cc:581
#10 0x0000561ba07165b1 in execute_sqlcom_select (thd=0x14c9fc000c58, all_tables=0x14c9fc010df0) at /test/10.11_opt/sql/sql_parse.cc:6261
#11 0x0000561ba07241f8 in mysql_execute_command (thd=0x14c9fc000c58, is_called_from_prepared_stmt=<optimized out>) at /test/10.11_opt/sql/sql_parse.cc:3945
#12 0x0000561ba07117b5 in mysql_parse (rawbuf=<optimized out>, length=<optimized out>, parser_state=<optimized out>, thd=0x14c9fc000c58) at /test/10.11_opt/sql/sql_parse.cc:8035
#13 mysql_parse (thd=0x14c9fc000c58, rawbuf=<optimized out>, length=<optimized out>, parser_state=<optimized out>) at /test/10.11_opt/sql/sql_parse.cc:7957
#14 0x0000561ba071d2ca in dispatch_command (command=COM_QUERY, thd=0x14c9fc000c58, packet=<optimized out>, packet_length=<optimized out>, blocking=<optimized out>) at /test/10.11_opt/sql/sql_class.h:1339
#15 0x0000561ba071f1f2 in do_command (thd=0x14c9fc000c58, blocking=blocking@entry=true) at /test/10.11_opt/sql/sql_parse.cc:1407
#16 0x0000561ba083746f in do_handle_one_connection (connect=<optimized out>, connect@entry=0x561ba3f976b8, put_in_cache=put_in_cache@entry=true) at /test/10.11_opt/sql/sql_connect.cc:1418
#17 0x0000561ba083774d in handle_one_connection (arg=0x561ba3f976b8) at /test/10.11_opt/sql/sql_connect.cc:1312
#18 0x000014ca6bb20609 in start_thread (arg=<optimized out>) at pthread_create.c:477
#19 0x000014ca6b70c133 in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95

10.11.0 bc563f1a4b0b38de3b41fd0f0d3d8b7f1aacbd8b (Debug)

Core was generated by `/test/MD190822-mariadb-10.11.0-linux-x86_64-dbg/bin/mysqld --no-defaults --core'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0  spider_db_mbase_util::append_table (
    this=this@entry=0x154339488150 <spider_db_mysql_utility>, 
    spider=spider@entry=0x1542bc060ca0, fields=fields@entry=0x1542bc0f3ed0, 
    str=str@entry=0x1542bc09b4f0, table_list=0x1542bc015180, 
    used_table_list=used_table_list@entry=0x1543394d1220, 
    current_pos=0x1543394d128c, cond_table_list_ptr=0x1543394d1290, 
    top_down=true, first=true)
    at /test/10.11_dbg/storage/spider/spd_db_mysql.cc:7011
[Current thread is 1 (Thread 0x1543394d3700 (LWP 3715892))]
(gdb) bt
#0  spider_db_mbase_util::append_table (this=this@entry=0x154339488150 <spider_db_mysql_utility>, spider=spider@entry=0x1542bc060ca0, fields=fields@entry=0x1542bc0f3ed0, str=str@entry=0x1542bc09b4f0, table_list=0x1542bc015180, used_table_list=used_table_list@entry=0x1543394d1220, current_pos=0x1543394d128c, cond_table_list_ptr=0x1543394d1290, top_down=true, first=true) at /test/10.11_dbg/storage/spider/spd_db_mysql.cc:7011
#1  0x000015433942b829 in spider_db_mbase_util::append_tables_top_down (this=this@entry=0x154339488150 <spider_db_mysql_utility>, spider=spider@entry=0x1542bc060ca0, fields=fields@entry=0x1542bc0f3ed0, str=str@entry=0x1542bc09b4f0, table_list=table_list@entry=0x1542bc0158e0, used_table_list=used_table_list@entry=0x1543394d1220, current_pos=0x1543394d128c, cond_table_list_ptr=0x1543394d1290) at /test/10.11_dbg/storage/spider/spd_db_mysql.cc:7174
#2  0x000015433942be4b in spider_db_mbase_util::append_embedding_tables (this=this@entry=0x154339488150 <spider_db_mysql_utility>, spider=spider@entry=0x1542bc060ca0, fields=fields@entry=0x1542bc0f3ed0, str=str@entry=0x1542bc09b4f0, table_list=0x1542bc0158e0, used_table_list=used_table_list@entry=0x1543394d1220, current_pos=0x1543394d128c, cond_table_list_ptr=0x1543394d1290) at /test/10.11_dbg/storage/spider/spd_db_mysql.cc:7327
#3  0x000015433942af4e in spider_db_mbase_util::append_table (this=this@entry=0x154339488150 <spider_db_mysql_utility>, spider=spider@entry=0x1542bc060ca0, fields=fields@entry=0x1542bc0f3ed0, str=str@entry=0x1542bc09b4f0, table_list=table_list@entry=0x1542bc014a48, used_table_list=used_table_list@entry=0x1543394d1220, current_pos=0x1543394d128c, cond_table_list_ptr=0x1543394d1290, top_down=false, first=false) at /test/10.11_dbg/storage/spider/spd_db_mysql.cc:6929
#4  0x000015433942c0ed in spider_db_mbase_util::append_from_and_tables (this=this@entry=0x154339488150 <spider_db_mysql_utility>, spider=<optimized out>, fields=fields@entry=0x1542bc0f3ed0, str=str@entry=0x1542bc09b4f0, table_list=0x1542bc014a48, table_list@entry=0x1542bc014310, table_count=<optimized out>) at /test/10.11_dbg/storage/spider/spd_db_mysql.cc:7381
#5  0x0000154339420f78 in spider_mbase_handler::append_from_and_tables_part (this=0x1542bc09b490, fields=0x1542bc0f3ed0, sql_type=<optimized out>) at /test/10.11_dbg/storage/spider/spd_db_mysql.cc:15416
#6  0x0000154339441e4e in spider_group_by_handler::init_scan (this=0x1542bc0f49e0) at /test/10.11_dbg/storage/spider/spd_group_by_handler.cc:1306
#7  0x0000556100442685 in Pushdown_query::execute (this=0x1542bc0f1418, join=join@entry=0x1542bc0ebe50) at /test/10.11_dbg/sql/group_by_handler.cc:49
#8  0x0000556100415399 in do_select (procedure=<optimized out>, join=0x1542bc0ebe50) at /test/10.11_dbg/sql/sql_select.cc:21206
#9  JOIN::exec_inner (this=this@entry=0x1542bc0ebe50) at /test/10.11_dbg/sql/sql_select.cc:4812
#10 0x0000556100415e28 in JOIN::exec (this=this@entry=0x1542bc0ebe50) at /test/10.11_dbg/sql/sql_select.cc:4590
#11 0x0000556100413bac in mysql_select (thd=thd@entry=0x1542bc000db8, tables=0x1542bc014310, fields=@0x1542bc013fd8: {<base_list> = {<Sql_alloc> = {<No data fields>}, first = 0x1542bc0142c8, last = 0x1542bc017be8, elements = 2}, <No data fields>}, conds=0x0, og_num=0, order=0x0, group=0x0, having=0x0, proc_param=0x0, select_options=2164525824, result=0x1542bc017680, unit=0x1542bc004ff0, select_lex=0x1542bc013d38) at /test/10.11_dbg/sql/sql_select.cc:5070
#12 0x00005561004143a2 in handle_select (thd=thd@entry=0x1542bc000db8, lex=lex@entry=0x1542bc004f18, result=result@entry=0x1542bc017680, setup_tables_done_option=setup_tables_done_option@entry=0) at /test/10.11_dbg/sql/sql_select.cc:581
#13 0x000055610037e5a6 in execute_sqlcom_select (thd=thd@entry=0x1542bc000db8, all_tables=0x1542bc014310) at /test/10.11_dbg/sql/sql_parse.cc:6261
#14 0x000055610038a8c7 in mysql_execute_command (thd=thd@entry=0x1542bc000db8, is_called_from_prepared_stmt=is_called_from_prepared_stmt@entry=false) at /test/10.11_dbg/sql/sql_parse.cc:3945
#15 0x0000556100378882 in mysql_parse (thd=thd@entry=0x1542bc000db8, rawbuf=<optimized out>, length=<optimized out>, parser_state=parser_state@entry=0x1543394d2330) at /test/10.11_dbg/sql/sql_parse.cc:8035
#16 0x0000556100385e6a in dispatch_command (command=command@entry=COM_QUERY, thd=thd@entry=0x1542bc000db8, packet=packet@entry=0x1542bc00b6e9 "", packet_length=packet_length@entry=75, blocking=blocking@entry=true) at /test/10.11_dbg/sql/sql_class.h:1339
#17 0x0000556100388574 in do_command (thd=0x1542bc000db8, blocking=blocking@entry=true) at /test/10.11_dbg/sql/sql_parse.cc:1407
#18 0x00005561004ea1da in do_handle_one_connection (connect=<optimized out>, connect@entry=0x5561042d9058, put_in_cache=put_in_cache@entry=true) at /test/10.11_dbg/sql/sql_connect.cc:1418
#19 0x00005561004ea6e3 in handle_one_connection (arg=0x5561042d9058) at /test/10.11_dbg/sql/sql_connect.cc:1312
#20 0x0000154364381609 in start_thread (arg=<optimized out>) at pthread_create.c:477
#21 0x0000154363f6d133 in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95

Bug confirmed present in:
MariaDB: 10.4.27 (dbg), 10.4.27 (opt), 10.5.18 (dbg), 10.5.18 (opt), 10.6.10 (dbg), 10.6.10 (opt), 10.7.6 (dbg), 10.7.6 (opt), 10.8.5 (dbg), 10.8.5 (opt), 10.9.2 (dbg), 10.9.2 (opt), 10.10.2 (dbg), 10.10.2 (opt), 10.11.0 (dbg), 10.11.0 (opt)

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

UniqueID's seen thus far

SIGSEGV|spider_db_mbase_util::append_table|spider_db_mbase_util::append_tables_top_down|spider_db_mbase_util::append_embedding_tables|spider_db_mbase_util::append_table
SIGSEGV|spider_db_mbase_util::append_table|spider_db_mbase_util::append_tables_top_down|spider_db_mbase_util::append_from_and_tables|spider_group_by_handler::init_scan

Comment by Yuchen Pei [ 2023-05-15 ]

I can reprod a crash from the test case in <https://jira.mariadb.org/browse/MDEV-29163?focusedCommentId=230317&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-230317> in 11.1 4e5b771e980edfdad5c5414aa62c81d409d585a4, taking over:

CURRENT_TEST: spider/bugfix.mdev_29163
mysqltest: At line 39: query 'SELECT tbl_a.* FROM tbl_a LEFT JOIN tbl_b LEFT JOIN tbl_c ON b = c ON a = b' failed: <Unknown> (2013): Lost connection to server during query

Comment by Yuchen Pei [ 2023-07-26 ]

We are reimplementing the spider join rewrite in MDEV-26247, which could fix this bug too.

Comment by Yuchen Pei [ 2023-09-22 ]

A simpler mtr case

--disable_query_log
--disable_result_log
--source ../../t/test_init.inc
--enable_result_log
--enable_query_log
evalp CREATE SERVER s FOREIGN DATA WRAPPER MYSQL OPTIONS (SOCKET "$MASTER_1_MYSOCK", DATABASE 'test',user 'root');
 
CREATE TABLE t1 (a INT);
CREATE TABLE t2 (b INT);
CREATE TABLE t3 (c INT, PRIMARY KEY(c));
 
CREATE TABLE t1_spider (a INT) ENGINE=SPIDER COMMENT = "wrapper 'mysql', srv 's', table 't1'";
CREATE TABLE t2_spider (b INT) ENGINE=SPIDER COMMENT = "wrapper 'mysql', srv 's', table 't2'";
CREATE TABLE t3_spider (c INT, PRIMARY KEY(c)) ENGINE=SPIDER COMMENT = "wrapper 'mysql', srv 's', table 't3'";
 
SELECT t1_spider.* FROM t1_spider LEFT JOIN t2_spider LEFT JOIN t3_spider ON b = c ON a = b;
 
# Cleanup
DROP TABLE t1_spider, t2_spider, t3_spider, t1, t2, t3;
drop server s;
 
--disable_query_log
--disable_result_log
--source ../../t/test_deinit.inc
--enable_result_log
--enable_query_log

Comment by Yuchen Pei [ 2023-11-17 ]

Fixed by MDEV-26247

Generated at Thu Feb 08 10:06:23 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.