mirror of
https://github.com/MariaDB/server.git
synced 2025-08-07 00:04:31 +03:00
MDEV-24748 extern column check missing in btr_index_rec_validate()
In btr_index_rec_validate(), externally stored column check is missing while matching the length of the field with the length of the field data stored in record. Fetch the length of the externally stored part and compare it with the fixed field length.
This commit is contained in:
@@ -3373,3 +3373,20 @@ c1 c2
|
|||||||
9 3
|
9 3
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
DROP TABLE t2;
|
DROP TABLE t2;
|
||||||
|
#
|
||||||
|
# MDEV-24748 Extern field check missing
|
||||||
|
# in btr_index_rec_validate()
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (pk INT, c1 char(255),
|
||||||
|
c2 char(255), c3 char(255), c4 char(255),
|
||||||
|
c5 char(255), c6 char(255), c7 char(255),
|
||||||
|
c8 char(255), primary key (pk)
|
||||||
|
) CHARACTER SET utf32 ENGINE=InnoDB;
|
||||||
|
INSERT INTO t1 VALUES
|
||||||
|
(1, 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'),
|
||||||
|
(2, 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p');
|
||||||
|
CHECK TABLE t1;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1 check status OK
|
||||||
|
ALTER TABLE t1 FORCE;
|
||||||
|
DROP TABLE t1;
|
||||||
|
@@ -2628,3 +2628,21 @@ SELECT * FROM t2;
|
|||||||
|
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
DROP TABLE t2;
|
DROP TABLE t2;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-24748 Extern field check missing
|
||||||
|
--echo # in btr_index_rec_validate()
|
||||||
|
--echo #
|
||||||
|
CREATE TABLE t1 (pk INT, c1 char(255),
|
||||||
|
c2 char(255), c3 char(255), c4 char(255),
|
||||||
|
c5 char(255), c6 char(255), c7 char(255),
|
||||||
|
c8 char(255), primary key (pk)
|
||||||
|
) CHARACTER SET utf32 ENGINE=InnoDB;
|
||||||
|
|
||||||
|
INSERT INTO t1 VALUES
|
||||||
|
(1, 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'),
|
||||||
|
(2, 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p');
|
||||||
|
CHECK TABLE t1;
|
||||||
|
ALTER TABLE t1 FORCE;
|
||||||
|
# Cleanup
|
||||||
|
DROP TABLE t1;
|
||||||
|
@@ -4519,6 +4519,18 @@ btr_index_rec_validate(
|
|||||||
|
|
||||||
rec_get_nth_field_offs(offsets, i, &len);
|
rec_get_nth_field_offs(offsets, i, &len);
|
||||||
|
|
||||||
|
if (rec_offs_nth_extern(offsets, i)) {
|
||||||
|
|
||||||
|
const byte* data = rec_get_nth_field(
|
||||||
|
rec, offsets, i, &len);
|
||||||
|
len -= BTR_EXTERN_FIELD_REF_SIZE;
|
||||||
|
ulint extern_len = mach_read_from_4(
|
||||||
|
data + len + BTR_EXTERN_LEN + 4);
|
||||||
|
if (fixed_size == extern_len) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Note that if fixed_size != 0, it equals the
|
/* Note that if fixed_size != 0, it equals the
|
||||||
length of a fixed-size column in the clustered index.
|
length of a fixed-size column in the clustered index.
|
||||||
We should adjust it here.
|
We should adjust it here.
|
||||||
|
Reference in New Issue
Block a user