1. 25 Oct, 2022 4 commits
    • Brandon Nesterenko's avatar
      MDEV-25616 XA PREPARE event group is not binlogged when.. · 42802ad6
      Brandon Nesterenko authored
      the only query of the XA transaction is on a non-transactional table
      errors out:
      
      XA BEGIN 'x';
      --error ER_DUP_ENTRY
      INSERT INTO t1 VALUES (1),(1);
      XA END 'x';
      XA PREPARE 'x';
      
      The binlogging pattern is correctly started as expected with
      the errored-out Query or its ROW format events, but there is
      no empty XA_prepare_log_event group.
      The following
      
      XA COMMIT 'x';
      
      therefore should not be logged either, but it does.
      
      The bug is fixed with proper maintaining of a read-write binlog hton
      property and use it to enforce correct binlogging decisions.
      Specifically in the bug description case XA COMMIT won't be binlogged
      in both when given in the same connection and externally after disconnect.
      The same continue to apply to an empty XA that do not change any data in all
      transactional engines involved.
      42802ad6
    • Marko Mäkelä's avatar
      Merge 10.4 into 10.5 · 4b4c2b8c
      Marko Mäkelä authored
      4b4c2b8c
    • Marko Mäkelä's avatar
      Merge 10.4 into 10.5 · 9a0b9e33
      Marko Mäkelä authored
      9a0b9e33
    • Marko Mäkelä's avatar
      Merge 10.3 into 10.4 · 667d3fbb
      Marko Mäkelä authored
      667d3fbb
  2. 24 Oct, 2022 8 commits
  3. 22 Oct, 2022 9 commits
    • Sergei Golubchik's avatar
      MDEV-29851 Cached role privileges are not invalidated when needed · 68fb05c3
      Sergei Golubchik authored
      GRANT ROLE can update db-level privileges -> must invalidate acl_cache
      68fb05c3
    • Sergei Golubchik's avatar
      cleanup: rename test file · 7a2f9956
      Sergei Golubchik authored
      7a2f9956
    • Sergei Golubchik's avatar
      remove two acl_cache->clear() · 741c14cb
      Sergei Golubchik authored
      * to "clear hostname cache" one needs to use hostname_cache->clear()
      * no need to clear acl_cache for SET DEFAULT ROLE
      741c14cb
    • Alexander Barkov's avatar
      MDEV-29481 mariadb-upgrade prints confusing statement · 2a57396e
      Alexander Barkov authored
      This is a new version of the patch instead of the reverted:
      
        MDEV-28727 ALTER TABLE ALGORITHM=NOCOPY does not work after upgrade
      
      Ignore the difference in key packing flags HA_BINARY_PACK_KEY and HA_PACK_KEY
      during ALTER to allow ALGORITHM=INSTANT and ALGORITHM=NOCOPY in more cases.
      
      If for some reasons (e.g. due to a bug fix such as MDEV-20704) these
      cumulative (over all segments) flags in KEY::flags are different for
      the old and new table inside compare_keys_but_name(), the difference
      in HA_BINARY_PACK_KEY and HA_PACK_KEY in KEY::flags is not really important:
      
      MyISAM and Aria can handle such cases well: per-segment flags are stored in
      MYI and MAI files anyway and they are read during ha_myisam::open()
      ha_maria::open() time. So indexes get opened with correct per-segment
      flags that were calculated during the table CREATE time, no matter
      what the old (CREATE time) and new (ALTER TIME) per-index compression
      flags are, and no matter if they are equal or not.
      
      All other engine ignore key compression flags, so this change
      is safe for other engines as well.
      2a57396e
    • Sergei Golubchik's avatar
      CONNECT: compile with libxml2 2.10.x · 16d4431a
      Sergei Golubchik authored
      storage/connect/libdoc.cpp:603:17: error: 'void xmlXPathInit()' is deprecated [-Werror=deprecated-declarations]
      16d4431a
    • Sergei Golubchik's avatar
      disable LTO in debian builds · 0609b345
      Sergei Golubchik authored
      0609b345
    • Sergei Golubchik's avatar
      MDEV-15795 Stack exceeded if pthread_attr_setstacksize(&thr_attr,8196) succeeds · 3e377fd3
      Sergei Golubchik authored
      on Linux this pthread_attr_setstacksize() fails with EINVAL
      "The stack size is less than PTHREAD_STACK_MIN (16384) bytes".
      
      But on FreeBSD it succeeds and causes a crash later, as 8196 is too little.
      
      Let's keep the stack at its default size in the timer thread.
      3e377fd3
    • Sergei Golubchik's avatar
      fix for x86 and other 32-bit little engian arch · 68391ace
      Sergei Golubchik authored
      (and for 64-bit big endian)
      68391ace
    • Haidong Ji's avatar
      Use OPENSSL_free instead of free to avoid instance crash · 45755c4e
      Haidong Ji authored
      OpenSSL handles memory management using **OPENSSL_xxx** API[^1]. For
      allocation, there is `OPENSSL_malloc`. To free it, `OPENSSL_free` should
      be called.
      
      We've been lucky that OPENSSL (and wolfSSL)'s implementation allowed the
      usage of `free` for memory cleanup. However, other OpenSSL forks, such
      as AWS-LC[^2], is not this forgiving. It will cause a server crash.
      
      Test case `openssl_1` provides good coverage for this issue. If a user
      is created using:
      `grant select on test.* to user1@localhost require SUBJECT "...";`
      user1 will crash the instance during connection under AWS-LC.
      
      There have been numerous OpenSSL forks[^3]. Due to FIPS[^4] and other
      related regulatory requirements, MariaDB will be built using them. This
      fix will increase MariaDB's adaptability by using more compliant and
      generally accepted API.
      
      All new code of the whole pull request, including one or several files
      that are either new files or modified ones, are contributed under the
      BSD-new license. I am contributing on behalf of my employer Amazon Web
      Services, Inc.
      
      [^1]: https://www.openssl.org/docs/man1.1.1/man3/OPENSSL_malloc.html
      [^2]: https://github.com/awslabs/aws-lc
      [^3]: https://en.wikipedia.org/wiki/OpenSSL#Forks
      [^4]: https://en.wikipedia.org/wiki/FIPS_140-2
      45755c4e
  4. 21 Oct, 2022 8 commits
  5. 20 Oct, 2022 1 commit
    • Monty's avatar
      MDEV-25606: Concurrent CREATE TRIGGER statements mix up in binlog and break replication · 99e14aa5
      Monty authored
      The bug is that we don't have a a lock on the trigger name, so it is
      possible for two threads to try to create the same trigger at the same
      time and both thinks that they have succeed.
      Same thing can happen with drop trigger or a combinations of create and
      drop trigger.
      
      Fixed by adding a mdl lock for the trigger name for the duration of the
      create/drop.
      99e14aa5
  6. 19 Oct, 2022 6 commits
  7. 18 Oct, 2022 3 commits
    • Daniel Black's avatar
      MDEV-29540 Incorrect sequence values in INSERT SELECT · 8c389393
      Daniel Black authored
      The population of default values in INSERT SELECT was being
      performed twice. With sequences, this resulted in every
      second sequence value being used.
      
      With SELECT INSERT we remove the second invokation of
      table->update_default_fields(). This was already performed
      in store_values() invoking fill_record_n_invoke_before_triggers()
      which invoked update_default_fields() previously.
      
      We do need to return an error on duplicate values, so the
      ::store_values is extended to take the ignore option.
      8c389393
    • Marko Mäkelä's avatar
    • Anel Husakovic's avatar
      MDEV-28455: CREATE TEMPORARY TABLES privilege is insufficient for SHOW COLUMNS · 64f822c1
      Anel Husakovic authored
      =========== Problem =============
      - `show columns` is not working for temporary tables, even though there
      is enough privilege `create temporary tables`.
      =========== Solution =============
      - Append `TMP_TABLE_ACLS` privilege when running `show columns` for temp
      tables.
      - Additionally `check_access()` for database only once, not for each
      field
      =========== Additionally =============
      - Update comments for function `check_table_access` arguments
      
      Reviewed by: <vicentiu@mariadb.org>
      64f822c1
  8. 17 Oct, 2022 1 commit
    • Dmitry Shulga's avatar
      MDEV-16128: Server crash in Item_func::print_op on 2nd execution of PS · bd9274fa
      Dmitry Shulga authored
      For some queries that involve tables with different but convertible
      character sets for columns taking part in the query, repeatable
      execution of such queries in PS mode or as part of a stored routine
      would result in server abnormal termination.
      
      For example,
        CREATE TABLE t1 (a2 varchar(10));
        CREATE TABLE t2 (u1 varchar(10) CHARACTER SET utf8);
        CREATE TABLE t3 (u2 varchar(10) CHARACTER SET utf8);
        PREPARE stmt FROM
          "SELECT t1.* FROM (t1 JOIN t2 ON (t2.u1 = t1.a2))
           WHERE (EXISTS (SELECT 1 FROM t3 WHERE t3.u2 = t1.a2))";
      
        EXECUTE stmt;
        EXECUTE stmt; <== Running this prepared statement the second time
                          results in server crash.
      
      The reason of server crash is that an instance of the class
      Item_func_conv_charset, that created for conversion of a column
      from one character set to another, is allocated on execution
      memory root but pointer to this instance is stored in an item
      placed on prepared statement memory root. Below is calls trace to
      the place where an instance of the class Item_func_conv_charset
      is created.
      
      setup_conds
       Item_func::fix_fields
        Item_bool_rowready_func2::fix_length_and_dec
         Item_func::setup_args_and_comparator
          Item_func_or_sum::agg_arg_charsets_for_comparison
           Item_func_or_sum::agg_arg_charsets
            Item_func_or_sum::agg_item_set_converter
             Item::safe_charset_converter
      
      And the following trace shows the place where a pointer to
      the instance of the class Item_func_conv_charset is passed
      to the class Item_func_eq, that is created on a memory root of
      the prepared statement.
      
      Prepared_statement::execute
       mysql_execute_command
        execute_sqlcom_select
         handle_select
          mysql_select
           JOIN::optimize
            JOIN::optimize_inner
             convert_join_subqueries_to_semijoins
              convert_subq_to_sj
      
      To fix the issue, switch to the Prepared Statement memory root
      before calling the method Item_func::setup_args_and_comparator
      in order to place any created Items on permanent memory root.
      It may seem that such approach would result in a memory
      leakage in case the parameter marker '?' is used in the query
      as in the following example
        PREPARE stmt FROM
          "SELECT t1.* FROM (t1 JOIN t2 ON (t2.u1 = t1.a2))
           WHERE (EXISTS (SELECT 1 FROM t3 WHERE t3.u2 = ?))";
        EXECUTE stmt USING convert('A' using latin1);
      but it wouldn't since for such case any of the parameter markers
      is treated as a constant and no subquery to semijoin optimization
      is performed.
      bd9274fa