@@ -646,7 +646,7 @@ row_log_table_delete(
646
646
&old_pk_extra_size);
647
647
ut_ad (old_pk_extra_size < 0x100 );
648
648
649
- mrec_size = 4 + old_pk_size;
649
+ mrec_size = 6 + old_pk_size;
650
650
651
651
/* Log enough prefix of the BLOB unless both the
652
652
old and new table are in COMPACT or REDUNDANT format,
@@ -683,8 +683,8 @@ row_log_table_delete(
683
683
*b++ = static_cast <byte>(old_pk_extra_size);
684
684
685
685
/* Log the size of external prefix we saved */
686
- mach_write_to_2 (b, ext_size);
687
- b += 2 ;
686
+ mach_write_to_4 (b, ext_size);
687
+ b += 4 ;
688
688
689
689
rec_convert_dtuple_to_temp (
690
690
b + old_pk_extra_size, new_index,
@@ -2437,14 +2437,14 @@ row_log_table_apply_op(
2437
2437
break ;
2438
2438
2439
2439
case ROW_T_DELETE:
2440
- /* 1 (extra_size) + 2 (ext_size) + at least 1 (payload) */
2441
- if (mrec + 4 >= mrec_end) {
2440
+ /* 1 (extra_size) + 4 (ext_size) + at least 1 (payload) */
2441
+ if (mrec + 6 >= mrec_end) {
2442
2442
return (NULL );
2443
2443
}
2444
2444
2445
2445
extra_size = *mrec++;
2446
- ext_size = mach_read_from_2 (mrec);
2447
- mrec += 2 ;
2446
+ ext_size = mach_read_from_4 (mrec);
2447
+ mrec += 4 ;
2448
2448
ut_ad (mrec < mrec_end);
2449
2449
2450
2450
/* We assume extra_size < 0x100 for the PRIMARY KEY prefix.
@@ -2455,6 +2455,10 @@ row_log_table_apply_op(
2455
2455
rec_init_offsets_temp (mrec, new_index, offsets);
2456
2456
next_mrec = mrec + rec_offs_data_size (offsets) + ext_size;
2457
2457
if (log->table ->n_v_cols ) {
2458
+ if (next_mrec + 2 >= mrec_end) {
2459
+ return (NULL );
2460
+ }
2461
+
2458
2462
next_mrec += mach_read_from_2 (next_mrec);
2459
2463
}
2460
2464
0 commit comments