summaryrefslogtreecommitdiff
path: root/storage/innobase/page
diff options
context:
space:
mode:
authorMarko Mäkelä <marko.makela@mariadb.com>2018-08-10 13:02:01 +0300
committerMarko Mäkelä <marko.makela@mariadb.com>2018-08-10 13:02:01 +0300
commitb853b4fd88b441f36eeb7eabdce79918ef10538a (patch)
tree22c9f22b5685fb91bd54841b737cda91b6e0a2ee /storage/innobase/page
parent0e15ae1602d505af6a19aa859196384065311c74 (diff)
downloadmariadb-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.cc5
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);