From 9dd5bc3843a44072cc7f211b6ad8cf3102e81cc1 Mon Sep 17 00:00:00 2001
From: "ingo@mysql.com" <>
Date: Wed, 28 Jun 2006 16:07:39 +0200
Subject: [PATCH] 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 | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/myisam/mi_dynrec.c b/myisam/mi_dynrec.c
index 43783ca2d36..1b691c955f1 100644
--- a/myisam/mi_dynrec.c
+++ b/myisam/mi_dynrec.c
@@ -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 &&
 	  flush_io_cache(&info->rec_cache))
 	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;
       if ((b_type=_mi_get_block_info(&block_info,file,
 				     block_info.next_filepos))