Commit 5df8c7b0 authored by unknown's avatar unknown

ixed overflow bug in MyISAM and ISAM when using packed tables with a lot of fields and blobs


isam/open.c:
  Fixed overflow bug when using packed tables and blobs
isam/test_all.res:
  updated test results
myisam/mi_dynrec.c:
  pack_bits not needed here as we do it on open
myisam/mi_open.c:
  Fixed overflow bug when using packed tables and blobs
parent 67f4bfd1
...@@ -415,6 +415,9 @@ static void setup_functions(register ISAM_SHARE *share) ...@@ -415,6 +415,9 @@ static void setup_functions(register ISAM_SHARE *share)
share->read_rnd=_nisam_read_rnd_dynamic_record; share->read_rnd=_nisam_read_rnd_dynamic_record;
share->delete_record=_nisam_delete_dynamic_record; share->delete_record=_nisam_delete_dynamic_record;
share->compare_record=_nisam_cmp_dynamic_record; share->compare_record=_nisam_cmp_dynamic_record;
/* add bits used to pack data to pack_reclength for faster allocation */
share->base.pack_reclength+= share->base.pack_bits;
if (share->base.blobs) if (share->base.blobs)
{ {
share->update_record=_nisam_update_blob_record; share->update_record=_nisam_update_blob_record;
......
This diff is collapsed.
...@@ -62,7 +62,7 @@ int _mi_write_blob_record(MI_INFO *info, const byte *record) ...@@ -62,7 +62,7 @@ int _mi_write_blob_record(MI_INFO *info, const byte *record)
extra=ALIGN_SIZE(MI_MAX_DYN_BLOCK_HEADER)+MI_SPLIT_LENGTH+ extra=ALIGN_SIZE(MI_MAX_DYN_BLOCK_HEADER)+MI_SPLIT_LENGTH+
MI_DYN_DELETE_BLOCK_HEADER+1; MI_DYN_DELETE_BLOCK_HEADER+1;
reclength= (info->s->base.pack_reclength+ info->s->base.pack_bits+ reclength= (info->s->base.pack_reclength+
_my_calc_total_blob_length(info,record)+ extra); _my_calc_total_blob_length(info,record)+ extra);
if (reclength > MI_DYN_MAX_ROW_LENGTH) if (reclength > MI_DYN_MAX_ROW_LENGTH)
{ {
......
...@@ -602,6 +602,8 @@ void mi_setup_functions(register MYISAM_SHARE *share) ...@@ -602,6 +602,8 @@ void mi_setup_functions(register MYISAM_SHARE *share)
share->compare_unique=_mi_cmp_dynamic_unique; share->compare_unique=_mi_cmp_dynamic_unique;
share->calc_checksum= mi_checksum; share->calc_checksum= mi_checksum;
/* add bits used to pack data to pack_reclength for faster allocation */
share->base.pack_reclength+= share->base.pack_bits;
if (share->base.blobs) if (share->base.blobs)
{ {
share->update_record=_mi_update_blob_record; share->update_record=_mi_update_blob_record;
......
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