diff options
author | Marko Mäkelä <marko.makela@mariadb.com> | 2018-08-10 13:02:01 +0300 |
---|---|---|
committer | Marko Mäkelä <marko.makela@mariadb.com> | 2018-08-10 13:02:01 +0300 |
commit | b853b4fd88b441f36eeb7eabdce79918ef10538a (patch) | |
tree | 22c9f22b5685fb91bd54841b737cda91b6e0a2ee /storage/innobase/page | |
parent | 0e15ae1602d505af6a19aa859196384065311c74 (diff) | |
download | mariadb-git-b853b4fd88b441f36eeb7eabdce79918ef10538a.tar.gz |
Report InnoDB redo log corruption better
recv_parse_log_recs(): Check for corruption before checking for
end-of-log-buffer.
mlog_parse_initial_log_record(), page_cur_parse_delete_rec():
Flag corruption for out-of-bounds values, and let the caller
dump the corrupted redo log extract.
Diffstat (limited to 'storage/innobase/page')
-rw-r--r-- | storage/innobase/page/page0cur.cc | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/storage/innobase/page/page0cur.cc b/storage/innobase/page/page0cur.cc index b611d484306..3aea43bfba0 100644 --- a/storage/innobase/page/page0cur.cc +++ b/storage/innobase/page/page0cur.cc @@ -2250,7 +2250,10 @@ page_cur_parse_delete_rec( offset = mach_read_from_2(ptr); ptr += 2; - ut_a(offset <= UNIV_PAGE_SIZE); + if (UNIV_UNLIKELY(offset >= srv_page_size)) { + recv_sys->found_corrupt_log = true; + return NULL; + } if (block) { page_t* page = buf_block_get_frame(block); |