Skip to content
Permalink
Browse files
Report all redo log corruption
Amend commit b853b4f
that was reverted in commit 29150e2.

recv_parse_log_recs(): Do check for corrupted redo log or file
system before checking for len==0, but only read *ptr if
it is not past the end of the buffer (end_ptr).

recv_parse_log_rec(): Report incorrect redo log type
in a consistent way with recv_parse_or_apply_log_rec_body().
This is a follow-up to commit f30c5af.
  • Loading branch information
dr-m committed Aug 16, 2018
1 parent a0ce321 commit 05153a6
Showing 1 changed file with 12 additions and 10 deletions.
@@ -2253,7 +2253,8 @@ recv_parse_log_rec(
case MLOG_MULTI_REC_END | MLOG_SINGLE_REC_FLAG:
case MLOG_DUMMY_RECORD | MLOG_SINGLE_REC_FLAG:
case MLOG_CHECKPOINT | MLOG_SINGLE_REC_FLAG:
ib::error() << "Incorrect log record type:" << *ptr;
ib::error() << "Incorrect log record type "
<< ib::hex(unsigned(*ptr));
recv_sys->found_corrupt_log = true;
return(0);
}
@@ -2422,10 +2423,6 @@ bool recv_parse_log_recs(lsn_t checkpoint_lsn, store_t store, bool apply)
len = recv_parse_log_rec(&type, ptr, end_ptr, &space,
&page_no, apply, &body);

if (len == 0) {
return(false);
}

if (recv_sys->found_corrupt_log) {
recv_report_corrupt_log(ptr, type, space, page_no);
return(true);
@@ -2435,6 +2432,10 @@ bool recv_parse_log_recs(lsn_t checkpoint_lsn, store_t store, bool apply)
return(true);
}

if (len == 0) {
return(false);
}

new_recovered_lsn = recv_calc_lsn_on_data_add(old_lsn, len);

if (new_recovered_lsn > recv_sys->scanned_lsn) {
@@ -2558,13 +2559,10 @@ bool recv_parse_log_recs(lsn_t checkpoint_lsn, store_t store, bool apply)
&type, ptr, end_ptr, &space, &page_no,
false, &body);

if (len == 0) {
return(false);
}

if (recv_sys->found_corrupt_log
|| type == MLOG_CHECKPOINT
|| (*ptr & MLOG_SINGLE_REC_FLAG)) {
|| (ptr != end_ptr
&& (*ptr & MLOG_SINGLE_REC_FLAG))) {
recv_sys->found_corrupt_log = true;
recv_report_corrupt_log(
ptr, type, space, page_no);
@@ -2575,6 +2573,10 @@ bool recv_parse_log_recs(lsn_t checkpoint_lsn, store_t store, bool apply)
return(true);
}

if (len == 0) {
return(false);
}

recv_previous_parsed_rec_type = type;
recv_previous_parsed_rec_offset
= recv_sys->recovered_offset + total_len;

0 comments on commit 05153a6

Please sign in to comment.