Commit d1307bde authored by Jan Lindström's avatar Jan Lindström

MDEV-8395: InnoDB: Assertion failure in file fil0pagecompress.cc line 539 (SIGFPE)

File block size might be 0 and used on modulo operator. Make sure that
file block size is initialized to 512.
parent 1a3321b6
...@@ -355,12 +355,16 @@ fil_compress_page( ...@@ -355,12 +355,16 @@ fil_compress_page(
write_size+=header_len; write_size+=header_len;
if (block_size <= 0) {
block_size = 512;
}
ut_ad(write_size > 0 && block_size > 0);
/* Actual write needs to be alligned on block size */ /* Actual write needs to be alligned on block size */
if (write_size % block_size) { if (write_size % block_size) {
size_t tmp = write_size; size_t tmp = write_size;
#ifdef UNIV_DEBUG
ut_a(block_size > 0);
#endif
write_size = (size_t)ut_uint64_align_up((ib_uint64_t)write_size, block_size); write_size = (size_t)ut_uint64_align_up((ib_uint64_t)write_size, block_size);
#ifdef UNIV_DEBUG #ifdef UNIV_DEBUG
ut_a(write_size > 0 && ((write_size % block_size) == 0)); ut_a(write_size > 0 && ((write_size % block_size) == 0));
......
...@@ -355,12 +355,16 @@ fil_compress_page( ...@@ -355,12 +355,16 @@ fil_compress_page(
write_size+=header_len; write_size+=header_len;
if (block_size <= 0) {
block_size = 512;
}
ut_ad(write_size > 0 && block_size > 0);
/* Actual write needs to be alligned on block size */ /* Actual write needs to be alligned on block size */
if (write_size % block_size) { if (write_size % block_size) {
size_t tmp = write_size; size_t tmp = write_size;
#ifdef UNIV_DEBUG
ut_a(block_size > 0);
#endif
write_size = (size_t)ut_uint64_align_up((ib_uint64_t)write_size, block_size); write_size = (size_t)ut_uint64_align_up((ib_uint64_t)write_size, block_size);
#ifdef UNIV_DEBUG #ifdef UNIV_DEBUG
ut_a(write_size > 0 && ((write_size % block_size) == 0)); ut_a(write_size > 0 && ((write_size % block_size) == 0));
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment