Skip to content

Commit e1f12f1

Browse files
committed
MDEV-37626 clang -fsanitize=undefined errors in row0log.cc
row_log_apply_ops(), row_log_table_apply_ops(): Instead of adding an offset to a potentially null pointer, subtract the offset from a never-null pointer and then compare to the potentially null pointer. Also, instead of adding a negative (wrapped-around) pointer offset, subtract a positive pointer offset. Reviewed by: Daniel Black
1 parent 687b186 commit e1f12f1

File tree

1 file changed

+10
-10
lines changed

1 file changed

+10
-10
lines changed

storage/innobase/row/row0log.cc

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2691,8 +2691,8 @@ row_log_table_apply_ops(
26912691
ut_ad((mrec == NULL) == (index->online_log->head.bytes == 0));
26922692

26932693
#ifdef UNIV_DEBUG
2694-
if (next_mrec_end == index->online_log->head.block
2695-
+ srv_sort_buf_size) {
2694+
if (next_mrec_end - srv_sort_buf_size
2695+
== index->online_log->head.block) {
26962696
/* If tail.bytes == 0, next_mrec_end can also be at
26972697
the end of tail.block. */
26982698
if (index->online_log->tail.bytes == 0) {
@@ -2706,8 +2706,8 @@ row_log_table_apply_ops(
27062706
ut_ad(index->online_log->tail.blocks
27072707
> index->online_log->head.blocks);
27082708
}
2709-
} else if (next_mrec_end == index->online_log->tail.block
2710-
+ index->online_log->tail.bytes) {
2709+
} else if (next_mrec_end - index->online_log->tail.bytes
2710+
== index->online_log->tail.block) {
27112711
ut_ad(next_mrec == index->online_log->tail.block
27122712
+ index->online_log->head.bytes);
27132713
ut_ad(index->online_log->tail.blocks == 0);
@@ -2808,7 +2808,7 @@ row_log_table_apply_ops(
28082808
} else {
28092809
memcpy(index->online_log->head.buf, mrec,
28102810
ulint(mrec_end - mrec));
2811-
mrec_end += ulint(index->online_log->head.buf - mrec);
2811+
mrec_end -= ulint(mrec - index->online_log->head.buf);
28122812
mrec = index->online_log->head.buf;
28132813
goto process_next_block;
28142814
}
@@ -3601,8 +3601,8 @@ row_log_apply_ops(
36013601
ut_ad((mrec == NULL) == (index->online_log->head.bytes == 0));
36023602

36033603
#ifdef UNIV_DEBUG
3604-
if (next_mrec_end == index->online_log->head.block
3605-
+ srv_sort_buf_size) {
3604+
if (next_mrec_end - srv_sort_buf_size
3605+
== index->online_log->head.block) {
36063606
/* If tail.bytes == 0, next_mrec_end can also be at
36073607
the end of tail.block. */
36083608
if (index->online_log->tail.bytes == 0) {
@@ -3616,8 +3616,8 @@ row_log_apply_ops(
36163616
ut_ad(index->online_log->tail.blocks
36173617
> index->online_log->head.blocks);
36183618
}
3619-
} else if (next_mrec_end == index->online_log->tail.block
3620-
+ index->online_log->tail.bytes) {
3619+
} else if (next_mrec_end - index->online_log->tail.bytes
3620+
== index->online_log->tail.block) {
36213621
ut_ad(next_mrec == index->online_log->tail.block
36223622
+ index->online_log->head.bytes);
36233623
ut_ad(index->online_log->tail.blocks == 0);
@@ -3700,7 +3700,7 @@ row_log_apply_ops(
37003700
} else {
37013701
memcpy(index->online_log->head.buf, mrec,
37023702
ulint(mrec_end - mrec));
3703-
mrec_end += ulint(index->online_log->head.buf - mrec);
3703+
mrec_end -= ulint(mrec - index->online_log->head.buf);
37043704
mrec = index->online_log->head.buf;
37053705
goto process_next_block;
37063706
}

0 commit comments

Comments
 (0)