Skip to content

Commit

Permalink
MDEV-31928 Assertion xid ... < 128 failed in trx_undo_write_xid()
Browse files Browse the repository at this point in the history
trx_undo_write_xid(): Correct an off-by-one error in a debug assertion.
  • Loading branch information
dr-m committed Aug 17, 2023
1 parent 518fe51 commit 5a8a8fc
Show file tree
Hide file tree
Showing 3 changed files with 62 additions and 2 deletions.
27 changes: 27 additions & 0 deletions mysql-test/suite/innodb/r/innodb-xa.result
Expand Up @@ -15,3 +15,30 @@ xa prepare 'xid2';
release savepoint `sv1`;
xa commit 'xid2';
drop table t1;
#
# MDEV-31928 Assertion xid ... < 128 failed in trx_undo_write_xid()
#
CREATE TABLE t (a INT PRIMARY KEY) ENGINE=INNODB;
XA START 'gtrid_67890123456789012345678901234567890123456789012345678901234','bqual_6789012345678901234567890123456789012345678901234567890123',1234567890;
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '1234567890' at line 1
XA START 'gtrid_6789012345678901234567890123456789012345678901234567890123','bqual_67890123456789012345678901234567890123456789012345678901234',1234567890;
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '1234567890' at line 1
XA START 'gtrid_6789012345678901234567890123456789012345678901234567890123','bqual_6789012345678901234567890123456789012345678901234567890123',1234567890;
INSERT INTO t VALUES(1);
XA END 'gtrid_67890123456789012345678901234567890123456789012345678901234','bqual_6789012345678901234567890123456789012345678901234567890123',1234567890;
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '1234567890' at line 1
XA END 'gtrid_6789012345678901234567890123456789012345678901234567890123','bqual_67890123456789012345678901234567890123456789012345678901234',1234567890;
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '1234567890' at line 1
XA END 'gtrid_6789012345678901234567890123456789012345678901234567890123','bqual_6789012345678901234567890123456789012345678901234567890123',1234567890;
XA PREPARE 'gtrid_67890123456789012345678901234567890123456789012345678901234','bqual_6789012345678901234567890123456789012345678901234567890123',1234567890;
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '1234567890' at line 1
XA PREPARE 'gtrid_6789012345678901234567890123456789012345678901234567890123','bqual_67890123456789012345678901234567890123456789012345678901234',1234567890;
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '1234567890' at line 1
XA PREPARE 'gtrid_6789012345678901234567890123456789012345678901234567890123','bqual_6789012345678901234567890123456789012345678901234567890123',1234567890;
XA COMMIT 'gtrid_67890123456789012345678901234567890123456789012345678901234','bqual_6789012345678901234567890123456789012345678901234567890123',1234567890;
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '1234567890' at line 1
XA COMMIT 'gtrid_6789012345678901234567890123456789012345678901234567890123','bqual_67890123456789012345678901234567890123456789012345678901234',1234567890;
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '1234567890' at line 1
XA COMMIT 'gtrid_6789012345678901234567890123456789012345678901234567890123','bqual_6789012345678901234567890123456789012345678901234567890123',1234567890;
DROP TABLE t;
# End of 10.4 tests
35 changes: 34 additions & 1 deletion mysql-test/suite/innodb/t/innodb-xa.test
@@ -1,6 +1,6 @@
--source include/have_innodb.inc

--disable_abort_on_error
--error ER_XAER_NOTA
xa rollback 'xid2';
drop table if exists t1;
create table t1(a int)engine=innodb;
Expand All @@ -9,9 +9,42 @@ xa start 'xid2';
insert into `t1` values (1);
savepoint `sv1`;
xa end 'xid2';
--error ER_XAER_RMFAIL
start transaction;
xa prepare 'xid2';
release savepoint `sv1`;
xa commit 'xid2';
drop table t1;

-- echo #
-- echo # MDEV-31928 Assertion xid ... < 128 failed in trx_undo_write_xid()
-- echo #

CREATE TABLE t (a INT PRIMARY KEY) ENGINE=INNODB;
--error ER_PARSE_ERROR
XA START 'gtrid_67890123456789012345678901234567890123456789012345678901234','bqual_6789012345678901234567890123456789012345678901234567890123',1234567890;
--error ER_PARSE_ERROR
XA START 'gtrid_6789012345678901234567890123456789012345678901234567890123','bqual_67890123456789012345678901234567890123456789012345678901234',1234567890;
XA START 'gtrid_6789012345678901234567890123456789012345678901234567890123','bqual_6789012345678901234567890123456789012345678901234567890123',1234567890;

INSERT INTO t VALUES(1);

--error ER_PARSE_ERROR
XA END 'gtrid_67890123456789012345678901234567890123456789012345678901234','bqual_6789012345678901234567890123456789012345678901234567890123',1234567890;
--error ER_PARSE_ERROR
XA END 'gtrid_6789012345678901234567890123456789012345678901234567890123','bqual_67890123456789012345678901234567890123456789012345678901234',1234567890;
XA END 'gtrid_6789012345678901234567890123456789012345678901234567890123','bqual_6789012345678901234567890123456789012345678901234567890123',1234567890;
--error ER_PARSE_ERROR
XA PREPARE 'gtrid_67890123456789012345678901234567890123456789012345678901234','bqual_6789012345678901234567890123456789012345678901234567890123',1234567890;
--error ER_PARSE_ERROR
XA PREPARE 'gtrid_6789012345678901234567890123456789012345678901234567890123','bqual_67890123456789012345678901234567890123456789012345678901234',1234567890;
XA PREPARE 'gtrid_6789012345678901234567890123456789012345678901234567890123','bqual_6789012345678901234567890123456789012345678901234567890123',1234567890;
--error ER_PARSE_ERROR
XA COMMIT 'gtrid_67890123456789012345678901234567890123456789012345678901234','bqual_6789012345678901234567890123456789012345678901234567890123',1234567890;
--error ER_PARSE_ERROR
XA COMMIT 'gtrid_6789012345678901234567890123456789012345678901234567890123','bqual_67890123456789012345678901234567890123456789012345678901234',1234567890;
XA COMMIT 'gtrid_6789012345678901234567890123456789012345678901234567890123','bqual_6789012345678901234567890123456789012345678901234567890123',1234567890;

DROP TABLE t;

-- echo # End of 10.4 tests
2 changes: 1 addition & 1 deletion storage/innobase/trx/trx0undo.cc
Expand Up @@ -665,7 +665,7 @@ trx_undo_write_xid(
{
DBUG_ASSERT(xid->gtrid_length >= 0);
DBUG_ASSERT(xid->bqual_length >= 0);
DBUG_ASSERT(xid->gtrid_length + xid->bqual_length < XIDDATASIZE);
DBUG_ASSERT(xid->gtrid_length + xid->bqual_length <= XIDDATASIZE);

mlog_write_ulint(log_hdr + TRX_UNDO_XA_FORMAT,
static_cast<ulint>(xid->formatID),
Expand Down

0 comments on commit 5a8a8fc

Please sign in to comment.