Uploaded image for project: 'MariaDB Server'
  1. MariaDB Server
  2. MDEV-40468

Package that contains a self reference package refcursor crashes the server

    XMLWordPrintable

Details

    • Bug
    • Status: Closed (View Workflow)
    • Critical
    • Resolution: Fixed
    • 13.1
    • N/A
    • Stored routines
    • None
    • Not for Release Notes
    • Q3/2026 Server Maintenance

    Description

      SET sql_mode=ORACLE;
      CREATE DATABASE db1;
      USE db1;
      CREATE TABLE t1 (a INT, b VARCHAR(32));
      INSERT INTO t1 VALUES (1,'one'),(2,'two');
       
      DELIMITER $$
      CREATE PACKAGE pkg AS
        TYPE rec IS RECORD (a INT, b VARCHAR(32));
        TYPE cur IS REF CURSOR RETURN pkg.rec;
      END;
      $$
      CREATE PROCEDURE p2 AS
        TYPE localcur IS REF CURSOR RETURN pkg.rec;
        c localcur;
        v pkg.rec;
      BEGIN
        OPEN c FOR SELECT a,b FROM t1;
        FETCH c INTO v;
        CLOSE c;
      END;
      $$
      DELIMITER ;
       
      CALL p2;
      

      Leads to

      MDEV-39587 CS 13.1.0 1693e0aedcae8e09972817db6235ab0a1b696125 (Debug, Clang 18.1.3-11) Build 21/07/2026

      mariadbd: /test/mtest/MDEV-39587/bb-13.1-bar-MDEV-39587_dbg/sql/sql_lex.cc:13401: bool LEX::sp_package_spec_check_cyclic_dependency(THD *, const Lex_ident_sys_st &, const Lex_ident_sys_st &) const: Assertion `li->sphead' failed.
      

      MDEV-39587 CS 13.1.0 1693e0aedcae8e09972817db6235ab0a1b696125 (Debug, Clang 18.1.3-11) Build 21/07/2026

      Core was generated by `/test/mtest/MDEV-39587/MD210726-mariadb-13.1.0-linux-x86_64-dbg/bin/mariadbd --'.
      Program terminated with signal SIGABRT, Aborted.
      #0  __pthread_kill_implementation (no_tid=0, signo=6, threadid=<optimized out>)at ./nptl/pthread_kill.c:44
      [Current thread is 1 (LWP 910911)]
      (gdb) bt
      #0  __pthread_kill_implementation (no_tid=0, signo=6, threadid=<optimized out>)at ./nptl/pthread_kill.c:44
      #1  __pthread_kill_internal (signo=6, threadid=<optimized out>)at ./nptl/pthread_kill.c:78
      #2  __GI___pthread_kill (threadid=<optimized out>, signo=signo@entry=6)at ./nptl/pthread_kill.c:89
      #3  0x0000721d7c84527e in __GI_raise (sig=sig@entry=6)at ../sysdeps/posix/raise.c:26
      #4  0x0000721d7c8288ff in __GI_abort () at ./stdlib/abort.c:79
      #5  0x0000721d7c82881b in __assert_fail_base (fmt=0x721d7c9d01e8 "%s%s%s:%u: %s%sAssertion `%s' failed.\n%n", assertion=assertion@entry=0x63fd9f9aa87c "li->sphead", file=file@entry=0x63fd9f9a6ac6 "/test/mtest/MDEV-39587/bb-13.1-bar-MDEV-39587_dbg/sql/sql_lex.cc", line=line@entry=13401, function=function@entry=0x63fd9f9aa7e4 "bool LEX::sp_package_spec_check_cyclic_dependency(THD *, const Lex_ident_sys_st &, const Lex_ident_sys_st &) const") at ./assert/assert.c:96
      #6  0x0000721d7c83b517 in __assert_fail (assertion=0x63fd9f9aa87c "li->sphead", file=0x63fd9f9a6ac6 "/test/mtest/MDEV-39587/bb-13.1-bar-MDEV-39587_dbg/sql/sql_lex.cc", line=13401, function=0x63fd9f9aa7e4 "bool LEX::sp_package_spec_check_cyclic_dependency(THD *, const Lex_ident_sys_st &, const Lex_ident_sys_st &) const")at ./assert/assert.c:105
      #7  0x000063fd9e81deb0 in LEX::sp_package_spec_check_cyclic_dependency (this=0x721d78049670, thd=0x69facc000d60, db=@0x721d780409e0: {<st_mysql_const_lex_string> = {str = 0x69facc09ef30 "db1", length = 3}, <Sql_alloc> = {<No data fields>}, <No data fields>}, name=@0x721d78043f50: {<st_mysql_const_lex_string> = {str = 0x69facc09f970 "pkg", length = 3}, <Sql_alloc> = {<No data fields>}, <No data fields>})at /test/mtest/MDEV-39587/bb-13.1-bar-MDEV-39587_dbg/sql/sql_lex.cc:13401
      #8  0x000063fd9e81e1d2 in LEX::declare_type_ref_cursor_return_typedef (this=0x721d78049670, thd=0x69facc000d60, type_name=@0x721d78048430: {<st_mysql_const_lex_string> = {str = 0x69facc09f870 "cur", length = 3}, <Sql_alloc> = {<No data fields>}, <No data fields>}, db=@0x721d78043f60: {<st_mysql_const_lex_string> = {str = 0x0, length = 0}, <Sql_alloc> = {<No data fields>}, <No data fields>}, package=@0x721d78043f50: {<st_mysql_const_lex_string> = {str = 0x69facc09f970 "pkg", length = 3}, <Sql_alloc> = {<No data fields>}, <No data fields>}, type=@0x721d78043f40: {<st_mysql_const_lex_string> = {str = 0x69facc09f990 "rec", length = 3}, <Sql_alloc> = {<No data fields>}, <No data fields>})at /test/mtest/MDEV-39587/bb-13.1-bar-MDEV-39587_dbg/sql/sql_lex.cc:13462
      #9  0x000063fd9ec52753 in ORAparse (thd=0x69facc000d60)at /test/mtest/MDEV-39587/bb-13.1-bar-MDEV-39587_dbg/sql/sql_yacc.yy:20908
      #10 0x000063fd9e85d4ea in parse_sql (thd=0x69facc000d60, parser_state=0x721d78049110, creation_ctx=0x69facc0a4560, do_pfs_digest=false)at /test/mtest/MDEV-39587/bb-13.1-bar-MDEV-39587_dbg/sql/sql_parse.cc:10372
      #11 0x000063fd9e70be6f in sp_compile (thd=0x69facc000d60, defstr=0x721d78049420, sql_mode=8858427918, parent=0x0, creation_ctx=0x69facc0a4560)at /test/mtest/MDEV-39587/bb-13.1-bar-MDEV-39587_dbg/sql/sp.cc:909
      #12 0x000063fd9e70b6fa in Sp_handler::db_load_routine (this=0x63fda044e5c0 <sp_handler_package_spec>, thd=0x69facc000d60, name=0x721d7804d1f0, sphp=0x721d7804d210, sql_mode=8858427918, sql_path=@0x721d7804cd10: {m_schemas = {{<Lex_ident_fs> = {<Lex_ident<Compare_table_names>> = {<Lex_cstring> = {<st_mysql_const_lex_string> = {str = 0x69facc09c7c0 "CURRENT_SCHEMA", length = 0}, <No data fields>}, <No data fields>}, <No data fields>}, <No data fields>}, {<Lex_ident_fs> = {<Lex_ident<Compare_table_names>> = {<Lex_cstring> = {<st_mysql_const_lex_string> = {str = 0x0, length = 0}, <No data fields>}, <No data fields>}, <No data fields>}, <No data fields>} <repeats 15 times>}, m_count = 1}, params=@0x721d7804b768: {str = 0x63fd9fbc5516 "", length = 0}, returns=@0x721d7804b758: {str = 0x63fd9fbc5516 "", length = 0}, body=@0x721d7804b748: {str = 0x69facc0a4490 "AS\n  TYPE rec IS RECORD (a INT, b VARCHAR(32));\n  TYPE cur IS REF CURSOR RETURN pkg.rec;  \nEND", length = 94}, chistics=@0x721d7804b710: {comment = {str = 0x63fd9fbc5516 "", length = 0}, suid = SP_IS_SUID, detistic = false, daccess = SP_CONTAINS_SQL, agg_type = NOT_AGGREGATE}, definer=@0x721d7804b6c8: {user = {str = 0x69facc0a4480 "root", length = 4}, host = {str = 0x69facc0a4485 "localhost", length = 9}}, created=20260721083225, modified=20260721083225, parent=0x0, creation_ctx=0x69facc0a4560)at /test/mtest/MDEV-39587/bb-13.1-bar-MDEV-39587_dbg/sql/sp.cc:1036
      #13 0x000063fd9e70b1da in Sp_handler::db_find_routine (this=0x63fda044e5c0 <sp_handler_package_spec>, thd=0x69facc000d60, name=0x721d7804d1f0, sphp=0x721d7804d210)at /test/mtest/MDEV-39587/bb-13.1-bar-MDEV-39587_dbg/sql/sp.cc:776
      #14 0x000063fd9e70bbb1 in Sp_handler::db_find_and_cache_routine (this=0x63fda044e5c0 <sp_handler_package_spec>, thd=0x69facc000d60, name=0x721d7804d1f0, sp=0x721d7804d210)at /test/mtest/MDEV-39587/bb-13.1-bar-MDEV-39587_dbg/sql/sp.cc:800
      #15 0x000063fd9e712959 in Sp_handler::sp_cache_routine (this=0x63fda044e5c0 <sp_handler_package_spec>, thd=0x69facc000d60, name=0x721d7804d1f0, sp=0x721d7804d210)at /test/mtest/MDEV-39587/bb-13.1-bar-MDEV-39587_dbg/sql/sp.cc:3010
      #16 0x000063fd9e71150f in Sp_handler::sp_cache_routine_reentrant (this=0x63fda044e5c0 <sp_handler_package_spec>, thd=0x69facc000d60, name=0x721d7804d1f0, sp=0x721d7804d210)at /test/mtest/MDEV-39587/bb-13.1-bar-MDEV-39587_dbg/sql/sp.cc:2524
      #17 0x000063fd9e711584 in Sp_handler::sp_cache_routine_reentrant_suppress_errors (this=0x63fda044e5c0 <sp_handler_package_spec>, thd=0x69facc000d60, name=0x721d7804d1f0, sp=0x721d7804d210)at /test/mtest/MDEV-39587/bb-13.1-bar-MDEV-39587_dbg/sql/sp.cc:2540
      #18 0x000063fd9e711625 in Sp_handler::find_package_spec (thd=0x69facc000d60, db=@0x721d7804d2b8: {<Lex_ident_fs> = {<Lex_ident<Compare_table_names>> = {<Lex_cstring> = {<st_mysql_const_lex_string> = {str = 0x69facc0a3b10 "db1", length = 3}, <No data fields>}, <No data fields>}, <No data fields>}, <No data fields>}, package=@0x721d78050910: {str = 0x69facc0a4380 "pkg", length = 3})at /test/mtest/MDEV-39587/bb-13.1-bar-MDEV-39587_dbg/sql/sp.cc:2560
      #19 0x000063fd9e726ec7 in sp_head::get_typedef_package_spec_or_error (this=0x69facc0a2c80, thd=0x69facc000d60, tdef=0x721d7804d3b0, package=@0x721d78050910: {<st_mysql_const_lex_string> = {str = 0x69facc0a4380 "pkg", length = 3}, <Sql_alloc> = {<No data fields>}, <No data fields>}, type=@0x721d78050900: {<st_mysql_const_lex_string> = {str = 0x69facc0a43a0 "rec", length = 3}, <Sql_alloc> = {<No data fields>}, <No data fields>})at /test/mtest/MDEV-39587/bb-13.1-bar-MDEV-39587_dbg/sql/sp_head.cc:4480
      #20 0x000063fd9e81e214 in LEX::declare_type_ref_cursor_return_typedef (this=0x721d78056030, thd=0x69facc000d60, type_name=@0x721d78054e38: {<st_mysql_const_lex_string> = {str = 0x69facc0a4270 "localcur", length = 8}, <Sql_alloc> = {<No data fields>}, <No data fields>}, db=@0x721d78050920: {<st_mysql_const_lex_string> = {str = 0x0, length = 0}, <Sql_alloc> = {<No data fields>}, <No data fields>}, package=@0x721d78050910: {<st_mysql_const_lex_string> = {str = 0x69facc0a4380 "pkg", length = 3}, <Sql_alloc> = {<No data fields>}, <No data fields>}, type=@0x721d78050900: {<st_mysql_const_lex_string> = {str = 0x69facc0a43a0 "rec", length = 3}, <Sql_alloc> = {<No data fields>}, <No data fields>})at /test/mtest/MDEV-39587/bb-13.1-bar-MDEV-39587_dbg/sql/sql_lex.cc:13466
      #21 0x000063fd9ec52753 in ORAparse (thd=0x69facc000d60)at /test/mtest/MDEV-39587/bb-13.1-bar-MDEV-39587_dbg/sql/sql_yacc.yy:20908
      #22 0x000063fd9e85d4ea in parse_sql (thd=0x69facc000d60, parser_state=0x721d78055ad0, creation_ctx=0x69facc01a860, do_pfs_digest=false)at /test/mtest/MDEV-39587/bb-13.1-bar-MDEV-39587_dbg/sql/sql_parse.cc:10372
      #23 0x000063fd9e70be6f in sp_compile (thd=0x69facc000d60, defstr=0x721d78055de0, sql_mode=8858427918, parent=0x0, creation_ctx=0x69facc01a860)at /test/mtest/MDEV-39587/bb-13.1-bar-MDEV-39587_dbg/sql/sp.cc:909
      #24 0x000063fd9e70b6fa in Sp_handler::db_load_routine (this=0x63fda044e5b0 <sp_handler_procedure>, thd=0x69facc000d60, name=0x721d78059b08, sphp=0x721d78059cd8, sql_mode=8858427918, sql_path=@0x721d780596d0: {m_schemas = {{<Lex_ident_fs> = {<Lex_ident<Compare_table_names>> = {<Lex_cstring> = {<st_mysql_const_lex_string> = {str = 0x69facc089bc0 "CURRENT_SCHEMA", length = 0}, <No data fields>}, <No data fields>}, <No data fields>}, <No data fields>}, {<Lex_ident_fs> = {<Lex_ident<Compare_table_names>> = {<Lex_cstring> = {<st_mysql_const_lex_string> = {str = 0x0, length = 0}, <No data fields>}, <No data fields>}, <No data fields>}, <No data fields>} <repeats 15 times>}, m_count = 1}, params=@0x721d78058128: {str = 0x63fd9fbc5516 "", length = 0}, returns=@0x721d78058118: {str = 0x63fd9fbc5516 "", length = 0}, body=@0x721d78058108: {str = 0x69facc01a750 "AS\n  TYPE localcur IS REF CURSOR RETURN pkg.rec;  \n  c localcur;\n  v pkg.rec;\nBEGIN\n  OPEN c FOR SELECT a,b FROM t1;\n  FETCH c INTO v;\n  CLOSE c;\nEND", length = 149}, chistics=@0x721d780580d0: {comment = {str = 0x63fd9fbc5516 "", length = 0}, suid = SP_IS_SUID, detistic = false, daccess = SP_CONTAINS_SQL, agg_type = NOT_AGGREGATE}, definer=@0x721d78058088: {user = {str = 0x69facc01a740 "root", length = 4}, host = {str = 0x69facc01a745 "localhost", length = 9}}, created=20260721083225, modified=20260721083225, parent=0x0, creation_ctx=0x69facc01a860)at /test/mtest/MDEV-39587/bb-13.1-bar-MDEV-39587_dbg/sql/sp.cc:1036
      #25 0x000063fd9e70b1da in Sp_handler::db_find_routine (this=0x63fda044e5b0 <sp_handler_procedure>, thd=0x69facc000d60, name=0x721d78059b08, sphp=0x721d78059cd8)at /test/mtest/MDEV-39587/bb-13.1-bar-MDEV-39587_dbg/sql/sp.cc:776
      #26 0x000063fd9e70bbb1 in Sp_handler::db_find_and_cache_routine (this=0x63fda044e5b0 <sp_handler_procedure>, thd=0x69facc000d60, name=0x721d78059b08, sp=0x721d78059cd8)at /test/mtest/MDEV-39587/bb-13.1-bar-MDEV-39587_dbg/sql/sp.cc:800
      #27 0x000063fd9e712959 in Sp_handler::sp_cache_routine (this=0x63fda044e5b0 <sp_handler_procedure>, thd=0x69facc000d60, name=0x721d78059b08, sp=0x721d78059cd8)at /test/mtest/MDEV-39587/bb-13.1-bar-MDEV-39587_dbg/sql/sp.cc:3010
      #28 0x000063fd9e712770 in Sroutine_hash_entry::sp_cache_routine (this=0x69facc01a4a0, thd=0x69facc000d60, sp=0x721d78059cd8)at /test/mtest/MDEV-39587/bb-13.1-bar-MDEV-39587_dbg/sql/sp.cc:2969
      #29 0x000063fd9e77d7ee in open_and_process_routine (thd=0x69facc000d60, prelocking_ctx=0x69facc0051c8, rt=0x69facc01a4a0, prelocking_strategy=0x721d78059f50, has_prelocking_list=false, ot_ctx=0x721d78059e38, need_prelocking=0x721d78059e17, routine_modifies_data=0x721d78059e16)at /test/mtest/MDEV-39587/bb-13.1-bar-MDEV-39587_dbg/sql/sql_base.cc:3965
      #30 0x000063fd9e77bd31 in open_tables (thd=0x69facc000d60, options=@0x69facc0068ac: {m_options = DDL_options_st::OPT_NONE}, start=0x721d78059f00, counter=0x721d78059eec, flags=0, prelocking_strategy=0x721d78059f50)at /test/mtest/MDEV-39587/bb-13.1-bar-MDEV-39587_dbg/sql/sql_base.cc:4844
      #31 0x000063fd9e77f12d in open_and_lock_tables (thd=0x69facc000d60, options=@0x69facc0068ac: {m_options = DDL_options_st::OPT_NONE}, tables=0x0, derived=true, flags=0, prelocking_strategy=0x721d78059f50)at /test/mtest/MDEV-39587/bb-13.1-bar-MDEV-39587_dbg/sql/sql_base.cc:5793
      #32 0x000063fd9e78ebde in open_and_lock_tables (thd=0x69facc000d60, tables=0x0, derived=true, flags=0)at /test/mtest/MDEV-39587/bb-13.1-bar-MDEV-39587_dbg/sql/sql_base.h:545
      #33 0x000063fd9e84a2a0 in Sql_cmd_call::execute (this=0x69facc01a680, thd=0x69facc000d60)at /test/mtest/MDEV-39587/bb-13.1-bar-MDEV-39587_dbg/sql/sql_parse.cc:3279
      #34 0x000063fd9e8568d8 in mysql_execute_command (thd=0x69facc000d60, is_called_from_prepared_stmt=false)at /test/mtest/MDEV-39587/bb-13.1-bar-MDEV-39587_dbg/sql/sql_parse.cc:5905
      #35 0x000063fd9e845a54 in mysql_parse (thd=0x69facc000d60, rawbuf=0x69facc01a3e0 "CALL p2", length=7, parser_state=0x721d7805b9f0)at /test/mtest/MDEV-39587/bb-13.1-bar-MDEV-39587_dbg/sql/sql_parse.cc:7945
      #36 0x000063fd9e842d9d in dispatch_command (command=COM_QUERY, thd=0x69facc000d60, packet=0x69facc00b611 "CALL p2", packet_length=7, blocking=true)at /test/mtest/MDEV-39587/bb-13.1-bar-MDEV-39587_dbg/sql/sql_parse.cc:1903
      #37 0x000063fd9e846603 in do_command (thd=0x69facc000d60, blocking=true)at /test/mtest/MDEV-39587/bb-13.1-bar-MDEV-39587_dbg/sql/sql_parse.cc:1437
      #38 0x000063fd9ea44b99 in do_handle_one_connection (connect=0x63fdda67f330, put_in_cache=true)at /test/mtest/MDEV-39587/bb-13.1-bar-MDEV-39587_dbg/sql/sql_connect.cc:1510
      #39 0x000063fd9ea4493e in handle_one_connection (arg=0x63fdda664430)at /test/mtest/MDEV-39587/bb-13.1-bar-MDEV-39587_dbg/sql/sql_connect.cc:1422
      #40 0x0000721d7c89caa4 in start_thread (arg=<optimized out>)at ./nptl/pthread_create.c:447
      #41 0x0000721d7c929c6c in clone3 ()at ../sysdeps/unix/sysv/linux/x86_64/clone3.S:78
      

      Attachments

        Issue Links

          Activity

            People

              bar Alexander Barkov
              ramesh Ramesh Sivaraman
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:

                Time Tracking

                  Estimated:
                  Original Estimate - 0d
                  0d
                  Remaining:
                  Remaining Estimate - 0d
                  0d
                  Logged:
                  Time Spent - 1.5h
                  1.5h

                  Git Integration

                    Error rendering 'com.xiplink.jira.git.jira_git_plugin:git-issue-webpanel'. Please contact your Jira administrators.