summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarko Mäkelä <marko.makela@mariadb.com>2022-10-10 09:12:55 +0300
committerMarko Mäkelä <marko.makela@mariadb.com>2022-10-10 09:12:55 +0300
commit56b97ca03ac19b5bf2d95494d861f49324008676 (patch)
tree0f55fb0742d3c707d7553977458eef7b2e214853
parent602124bb3bdff83f208406c866774c7a9bf14ea8 (diff)
downloadmariadb-git-56b97ca03ac19b5bf2d95494d861f49324008676.tar.gz
MDEV-29742 heap number overflow
A previous fix in commit efd8af535a4fa4aa3dd89a325340b6eb648e1bc8 failed to cover ALTER TABLE. PageBulk::isSpaceAvailable(): Check for record heap number overflow.
-rw-r--r--mysql-test/suite/innodb/r/innodb-64k.result4
-rw-r--r--mysql-test/suite/innodb/t/innodb-64k.test5
-rw-r--r--storage/innobase/btr/btr0bulk.cc7
3 files changed, 13 insertions, 3 deletions
diff --git a/mysql-test/suite/innodb/r/innodb-64k.result b/mysql-test/suite/innodb/r/innodb-64k.result
index 372dbbb91a0..189a615cbe3 100644
--- a/mysql-test/suite/innodb/r/innodb-64k.result
+++ b/mysql-test/suite/innodb/r/innodb-64k.result
@@ -1081,9 +1081,11 @@ COMMIT;
drop table t2;
DROP TABLE t1;
#
-# MDEV-19526 heap number overflow
+# MDEV-19526/MDEV-29742 heap number overflow
#
CREATE TABLE t1(a SMALLINT NOT NULL UNIQUE AUTO_INCREMENT, KEY(a))
ENGINE=InnoDB;
INSERT INTO t1 (a) SELECT seq FROM seq_1_to_8191;
+ALTER TABLE t1 FORCE, ALGORITHM=INPLACE;
DROP TABLE t1;
+# End of 10.3 tests
diff --git a/mysql-test/suite/innodb/t/innodb-64k.test b/mysql-test/suite/innodb/t/innodb-64k.test
index 62d7b929ba1..972ba6bb8b8 100644
--- a/mysql-test/suite/innodb/t/innodb-64k.test
+++ b/mysql-test/suite/innodb/t/innodb-64k.test
@@ -641,9 +641,12 @@ drop table t2;
DROP TABLE t1;
--echo #
---echo # MDEV-19526 heap number overflow
+--echo # MDEV-19526/MDEV-29742 heap number overflow
--echo #
CREATE TABLE t1(a SMALLINT NOT NULL UNIQUE AUTO_INCREMENT, KEY(a))
ENGINE=InnoDB;
INSERT INTO t1 (a) SELECT seq FROM seq_1_to_8191;
+ALTER TABLE t1 FORCE, ALGORITHM=INPLACE;
DROP TABLE t1;
+
+--echo # End of 10.3 tests
diff --git a/storage/innobase/btr/btr0bulk.cc b/storage/innobase/btr/btr0bulk.cc
index fdeba1e375b..0b53438feb7 100644
--- a/storage/innobase/btr/btr0bulk.cc
+++ b/storage/innobase/btr/btr0bulk.cc
@@ -1,7 +1,7 @@
/*****************************************************************************
Copyright (c) 2014, 2019, Oracle and/or its affiliates. All Rights Reserved.
-Copyright (c) 2017, 2021, MariaDB Corporation.
+Copyright (c) 2017, 2022, MariaDB Corporation.
This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
@@ -597,6 +597,11 @@ bool
PageBulk::isSpaceAvailable(
ulint rec_size)
{
+ if (m_rec_no >= 8190) {
+ ut_ad(srv_page_size == 65536);
+ return false;
+ }
+
ulint slot_size;
ulint required_space;