Commit 9ad8a373 authored by unknown's avatar unknown

Bug#19835 - Binary copy of corrupted tables crash the server when issuing a query

A corrupt table with dynamic record format can crash the 
server when trying to select from it.
        
I fixed the crash that resulted from the particular type 
of corruption that has been reported for this bug.

No test case. To test it, one needs a table with a very special
corruption. The bug report contains a file with such a table.


myisam/mi_dynrec.c:
  Bug#19835 - Binary copy of corrupted tables crash the server when issuing a query
  Added a protection against corrupted records. A dynamic 
  record header with invalid 'next' pointer could trigger 
  the assert in _mi_get_block_info(). Now I avoid this by 
  reporting a corruption error.
parent f4a07612
...@@ -1116,6 +1116,9 @@ int _mi_read_dynamic_record(MI_INFO *info, my_off_t filepos, byte *buf) ...@@ -1116,6 +1116,9 @@ int _mi_read_dynamic_record(MI_INFO *info, my_off_t filepos, byte *buf)
info->rec_cache.pos_in_file <= block_info.next_filepos && info->rec_cache.pos_in_file <= block_info.next_filepos &&
flush_io_cache(&info->rec_cache)) flush_io_cache(&info->rec_cache))
goto err; goto err;
/* A corrupted table can have wrong pointers. (Bug# 19835) */
if (block_info.next_filepos == HA_OFFSET_ERROR)
goto panic;
info->rec_cache.seek_not_done=1; info->rec_cache.seek_not_done=1;
if ((b_type=_mi_get_block_info(&block_info,file, if ((b_type=_mi_get_block_info(&block_info,file,
block_info.next_filepos)) block_info.next_filepos))
......
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