summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mysql-test/r/archive.result19
-rw-r--r--mysql-test/std_data/bug32880.ARNbin0 -> 131 bytes
-rw-r--r--mysql-test/std_data/bug32880.ARZbin0 -> 8744 bytes
-rw-r--r--mysql-test/std_data/bug32880.frmbin0 -> 8578 bytes
-rw-r--r--mysql-test/t/archive.test15
-rw-r--r--storage/archive/ha_archive.cc6
6 files changed, 36 insertions, 4 deletions
diff --git a/mysql-test/r/archive.result b/mysql-test/r/archive.result
index 8c26ea1ff82..02acccb234e 100644
--- a/mysql-test/r/archive.result
+++ b/mysql-test/r/archive.result
@@ -12695,3 +12695,22 @@ a b
1 NULL
2 NULL
DROP TABLE t1;
+#
+# BUG#32880 - Repairing Archive table fails with internal error 144
+#
+
+# Test with an existing table which is corrupted
+# Copy t1 from std_data
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `a` int(11) DEFAULT NULL,
+ `b` blob
+) ENGINE=ARCHIVE DEFAULT CHARSET=latin1
+CHECK TABLE t1;
+Table Op Msg_type Msg_text
+test.t1 check error Corrupt
+REPAIR TABLE t1;
+Table Op Msg_type Msg_text
+test.t1 repair error Corrupt
+DROP TABLE t1;
diff --git a/mysql-test/std_data/bug32880.ARN b/mysql-test/std_data/bug32880.ARN
new file mode 100644
index 00000000000..643b0dfbad5
--- /dev/null
+++ b/mysql-test/std_data/bug32880.ARN
Binary files differ
diff --git a/mysql-test/std_data/bug32880.ARZ b/mysql-test/std_data/bug32880.ARZ
new file mode 100644
index 00000000000..4e151822647
--- /dev/null
+++ b/mysql-test/std_data/bug32880.ARZ
Binary files differ
diff --git a/mysql-test/std_data/bug32880.frm b/mysql-test/std_data/bug32880.frm
new file mode 100644
index 00000000000..66a4c7d7538
--- /dev/null
+++ b/mysql-test/std_data/bug32880.frm
Binary files differ
diff --git a/mysql-test/t/archive.test b/mysql-test/t/archive.test
index 7139d95ab49..0d521f95b38 100644
--- a/mysql-test/t/archive.test
+++ b/mysql-test/t/archive.test
@@ -1599,3 +1599,18 @@ INSERT INTO t1 VALUES (NULL, NULL),(NULL, NULL);
FLUSH TABLE t1;
SELECT * FROM t1 ORDER BY a;
DROP TABLE t1;
+
+--echo #
+--echo # BUG#32880 - Repairing Archive table fails with internal error 144
+--echo #
+--echo
+--echo # Test with an existing table which is corrupted
+--echo # Copy t1 from std_data
+let $MYSQLD_DATADIR= `select @@datadir`;
+copy_file std_data/bug32880.frm $MYSQLD_DATADIR/test/t1.frm;
+copy_file std_data/bug32880.ARZ $MYSQLD_DATADIR/test/t1.ARZ;
+copy_file std_data/bug32880.ARN $MYSQLD_DATADIR/test/t1.ARN;
+SHOW CREATE TABLE t1;
+CHECK TABLE t1;
+REPAIR TABLE t1;
+DROP TABLE t1;
diff --git a/storage/archive/ha_archive.cc b/storage/archive/ha_archive.cc
index 7edfca53751..d20ab3bf723 100644
--- a/storage/archive/ha_archive.cc
+++ b/storage/archive/ha_archive.cc
@@ -1076,11 +1076,9 @@ int ha_archive::unpack_row(azio_stream *file_to_read, uchar *record)
read= azread(file_to_read, record_buffer->buffer, row_len, &error);
- DBUG_ASSERT(row_len == read);
-
if (read != row_len || error)
{
- DBUG_RETURN(-1);
+ DBUG_RETURN(HA_ERR_CRASHED_ON_USAGE);
}
/* Copy null bits */
@@ -1257,7 +1255,7 @@ int ha_archive::repair(THD* thd, HA_CHECK_OPT* check_opt)
int rc= optimize(thd, check_opt);
if (rc)
- DBUG_RETURN(HA_ERR_CRASHED_ON_REPAIR);
+ DBUG_RETURN(HA_ADMIN_CORRUPT);
share->crashed= FALSE;
DBUG_RETURN(0);