Skip to content

Commit 6123073

Browse files
author
Shaohua Wang
committed
BUG#23760086 INNODB: ASSERTION FAILURE: MACH0DATA.IC:56:(N | 0XFFFFUL)
<= 0XFFFFUL Analysis: In row_log_table_delete(), extern size could be greater than 2 bytes int if there are enough index on blob columns. Solution: Use 4 bytes int other than 2 bytes for extern size. Reviewed-by: Marko Mäkelä <[email protected]> RB: 13573
1 parent 2828e00 commit 6123073

File tree

1 file changed

+7
-7
lines changed

1 file changed

+7
-7
lines changed

storage/innobase/row/row0log.cc

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -613,7 +613,7 @@ row_log_table_delete(
613613
&old_pk_extra_size);
614614
ut_ad(old_pk_extra_size < 0x100);
615615

616-
mrec_size = 4 + old_pk_size;
616+
mrec_size = 6 + old_pk_size;
617617

618618
/* Log enough prefix of the BLOB unless both the
619619
old and new table are in COMPACT or REDUNDANT format,
@@ -643,8 +643,8 @@ row_log_table_delete(
643643
*b++ = static_cast<byte>(old_pk_extra_size);
644644

645645
/* Log the size of external prefix we saved */
646-
mach_write_to_2(b, ext_size);
647-
b += 2;
646+
mach_write_to_4(b, ext_size);
647+
b += 4;
648648

649649
rec_convert_dtuple_to_temp(
650650
b + old_pk_extra_size, new_index,
@@ -2268,14 +2268,14 @@ row_log_table_apply_op(
22682268
break;
22692269

22702270
case ROW_T_DELETE:
2271-
/* 1 (extra_size) + 2 (ext_size) + at least 1 (payload) */
2272-
if (mrec + 4 >= mrec_end) {
2271+
/* 1 (extra_size) + 4 (ext_size) + at least 1 (payload) */
2272+
if (mrec + 6 >= mrec_end) {
22732273
return(NULL);
22742274
}
22752275

22762276
extra_size = *mrec++;
2277-
ext_size = mach_read_from_2(mrec);
2278-
mrec += 2;
2277+
ext_size = mach_read_from_4(mrec);
2278+
mrec += 4;
22792279
ut_ad(mrec < mrec_end);
22802280

22812281
/* We assume extra_size < 0x100 for the PRIMARY KEY prefix.

0 commit comments

Comments
 (0)