summaryrefslogtreecommitdiff
path: root/storage/innobase/page/page0cur.cc
diff options
context:
space:
mode:
Diffstat (limited to 'storage/innobase/page/page0cur.cc')
-rw-r--r--storage/innobase/page/page0cur.cc35
1 files changed, 19 insertions, 16 deletions
diff --git a/storage/innobase/page/page0cur.cc b/storage/innobase/page/page0cur.cc
index 45cf5886302..dd20f4bca0f 100644
--- a/storage/innobase/page/page0cur.cc
+++ b/storage/innobase/page/page0cur.cc
@@ -1342,23 +1342,26 @@ no_data:
/* Try to copy any data bytes of the preceding record. */
const byte * const cd= cur->rec + (rd - rec);
- const byte *cdm= cd;
- const byte *rdm= rd;
- while (*rdm++ == *cdm++)
- if (cdm == c_end)
- break;
- cdm--, rdm--;
- ut_ad(rdm - rd + bd <= insert_buf + rec_size);
- size_t len= static_cast<size_t>(rdm - rd);
- ut_ad(!memcmp(rd, cd, len));
- if (len > 2)
+ if (c_end - cd > 2)
{
- mtr->memcpy<mtr_t::FORCED>(*block, b, r, cur->rec - c);
- memcpy(bd, cd, len);
- mtr->memmove(*block, page_offset(bd), page_offset(cd), len);
- c= cdm;
- b= rdm - rd + bd;
- r= rdm;
+ const byte *cdm= cd;
+ const byte *rdm= rd;
+ while (*rdm++ == *cdm++)
+ if (cdm == c_end)
+ break;
+ cdm--, rdm--;
+ ut_ad(rdm - rd + bd <= insert_buf + rec_size);
+ size_t len= static_cast<size_t>(rdm - rd);
+ ut_ad(!memcmp(rd, cd, len));
+ if (len > 2)
+ {
+ mtr->memcpy<mtr_t::FORCED>(*block, b, r, cur->rec - c);
+ memcpy(bd, cd, len);
+ mtr->memmove(*block, page_offset(bd), page_offset(cd), len);
+ c= cdm;
+ b= rdm - rd + bd;
+ r= rdm;
+ }
}
}
}