Commit 7c2c8f07 authored by dkatz@damien-katzs-computer.local's avatar dkatz@damien-katzs-computer.local
Browse files

Bug #29419 "Specifying a join_buffer > 4GB on 64 bit machines not possible."

Use size_t instead of uint when calculating join buffer size, because uint can be overflown on 64-bit platforms and join_buffer_size > 4 GB.

The test case for this bug is a part of the test suite for bug #5731.
parent 48dfd5c7
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -13014,7 +13014,8 @@ static int
join_init_cache(THD *thd,JOIN_TAB *tables,uint table_count)
{
  reg1 uint i;
  uint length,blobs,size;
  uint length, blobs;
  size_t size;
  CACHE_FIELD *copy,**blob_ptr;
  JOIN_CACHE  *cache;
  JOIN_TAB *join_tab;
@@ -13130,7 +13131,7 @@ store_record_in_cache(JOIN_CACHE *cache)
  length=cache->length;
  if (cache->blobs)
    length+=used_blob_length(cache->blob_ptr);
  if ((last_record=(length+cache->length > (uint) (cache->end - pos))))
  if ((last_record= (length + cache->length > (size_t) (cache->end - pos))))
    cache->ptr_record=cache->records;

  /*
@@ -13176,7 +13177,7 @@ store_record_in_cache(JOIN_CACHE *cache)
    }
  }
  cache->pos=pos;
  return last_record || (uint) (cache->end -pos) < cache->length;
  return last_record || (size_t) (cache->end - pos) < cache->length;
}