diff options
author | Marko Mäkelä <marko.makela@mariadb.com> | 2022-10-10 09:12:55 +0300 |
---|---|---|
committer | Marko Mäkelä <marko.makela@mariadb.com> | 2022-10-10 09:12:55 +0300 |
commit | 56b97ca03ac19b5bf2d95494d861f49324008676 (patch) | |
tree | 0f55fb0742d3c707d7553977458eef7b2e214853 | |
parent | 602124bb3bdff83f208406c866774c7a9bf14ea8 (diff) | |
download | mariadb-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.result | 4 | ||||
-rw-r--r-- | mysql-test/suite/innodb/t/innodb-64k.test | 5 | ||||
-rw-r--r-- | storage/innobase/btr/btr0bulk.cc | 7 |
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; |