diff options
author | unknown <dkatz@damien-katzs-computer.local> | 2007-07-31 16:36:29 -0400 |
---|---|---|
committer | unknown <dkatz@damien-katzs-computer.local> | 2007-07-31 16:36:29 -0400 |
commit | d0e8d1ab5401a2cc7ce8f75e15340b67fed6cfbf (patch) | |
tree | 6536f1af9204b75bb07d1faeafd39b34165beb06 | |
parent | b635b2861f355844dfd5bac4d9400e0fbac9804b (diff) | |
download | mariadb-git-d0e8d1ab5401a2cc7ce8f75e15340b67fed6cfbf.tar.gz |
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.
sql/sql_select.cc:
Use size_t instead of uint when calculating join buffer size, because uint can be overflown on 64-bit platforms and join_buffer_size > 4G.
-rw-r--r-- | sql/sql_select.cc | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/sql/sql_select.cc b/sql/sql_select.cc index be6d1f74852..4c48c70dcca 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -13307,7 +13307,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; @@ -13423,7 +13424,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; /* @@ -13469,7 +13470,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; } |