summaryrefslogtreecommitdiff
path: root/myisam/mi_open.c
diff options
context:
space:
mode:
authorunknown <cmiller@zippy.cornsilk.net>2007-01-31 16:23:05 -0500
committerunknown <cmiller@zippy.cornsilk.net>2007-01-31 16:23:05 -0500
commitffe6fae3bb0961a07a22c1e0fb90a4d123d22690 (patch)
tree310051f9adb743a7d4761e730eb5dc7f6124cf95 /myisam/mi_open.c
parent3d6e5feaf956d86751f3a1774fafd3bbaea3b1bc (diff)
parent92a7c1ed9c6dec1fee17a830fdabe9272d6692bd (diff)
downloadmariadb-git-ffe6fae3bb0961a07a22c1e0fb90a4d123d22690.tar.gz
Merge bk-internal.mysql.com:/home/bk/mysql-5.0
into zippy.cornsilk.net:/home/cmiller/work/mysql/mysql-5.0-maint configure.in: Auto merged mysql-test/mysql-test-run.pl: Auto merged mysql-test/r/range.result: Auto merged mysql-test/r/select.result: Auto merged mysql-test/t/select.test: Auto merged scripts/mysqld_multi.sh: Auto merged sql/item.cc: Auto merged sql/item_cmpfunc.cc: Auto merged sql/item_cmpfunc.h: Auto merged sql/mysql_priv.h: Auto merged sql/mysqld.cc: Auto merged sql/sql_select.cc: Auto merged
Diffstat (limited to 'myisam/mi_open.c')
-rw-r--r--myisam/mi_open.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/myisam/mi_open.c b/myisam/mi_open.c
index 20a50fff9d7..7d66f27cae5 100644
--- a/myisam/mi_open.c
+++ b/myisam/mi_open.c
@@ -322,7 +322,13 @@ MI_INFO *mi_open(const char *name, int mode, uint open_flags)
for (j=0 ; j < share->keyinfo[i].keysegs; j++,pos++)
{
disk_pos=mi_keyseg_read(disk_pos, pos);
-
+ if (pos->flag & HA_BLOB_PART &&
+ ! (share->options & (HA_OPTION_COMPRESS_RECORD |
+ HA_OPTION_PACK_RECORD)))
+ {
+ my_errno= HA_ERR_CRASHED;
+ goto err;
+ }
if (pos->type == HA_KEYTYPE_TEXT ||
pos->type == HA_KEYTYPE_VARTEXT1 ||
pos->type == HA_KEYTYPE_VARTEXT2)
@@ -440,6 +446,13 @@ MI_INFO *mi_open(const char *name, int mode, uint open_flags)
offset+=share->rec[i].length;
}
share->rec[i].type=(int) FIELD_LAST; /* End marker */
+ if (offset > share->base.reclength)
+ {
+ /* purecov: begin inspected */
+ my_errno= HA_ERR_CRASHED;
+ goto err;
+ /* purecov: end */
+ }
if (! lock_error)
{
@@ -504,6 +517,7 @@ MI_INFO *mi_open(const char *name, int mode, uint open_flags)
share->lock.get_status=mi_get_status;
share->lock.copy_status=mi_copy_status;
share->lock.update_status=mi_update_status;
+ share->lock.restore_status= mi_restore_status;
share->lock.check_status=mi_check_status;
}
}