From 93fb6ce1fd8800af73fa630081ff670c49d72b7e Mon Sep 17 00:00:00 2001 From: Igor Babaev Date: Tue, 7 Dec 2010 19:45:28 -0800 Subject: [PATCH] The function records_in_index_intersect_extension tried to read after the last element of the array of rec_per_key values for an index. This caused a valgrind complain and probably could result in wrong estimates of the cardinality of index intersections. --- sql/opt_range.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sql/opt_range.cc b/sql/opt_range.cc index 60b62b05b60..1cd369ddc7d 100644 --- a/sql/opt_range.cc +++ b/sql/opt_range.cc @@ -5050,6 +5050,7 @@ ha_rows records_in_index_intersect_extension(PARTIAL_INDEX_INTERSECTION_INFO *cu KEY *key_info= ext_index_scan->key_info; KEY_PART_INFO* key_part= key_info->key_part; KEY_PART_INFO* key_part_end= key_part+ext_index_scan->used_key_parts; + uint key_parts= key_info->key_parts; MY_BITMAP *used_fields= &ext_index_scan->used_fields; if (!curr->length) @@ -5072,7 +5073,7 @@ ha_rows records_in_index_intersect_extension(PARTIAL_INDEX_INTERSECTION_INFO *cu { ulong *rec_per_key= key_info->rec_per_key+i; ulong f1= rec_per_key[0] ? rec_per_key[0] : 1; - ulong f2= rec_per_key[1] ? rec_per_key[1] : 1; + ulong f2= i+1 < key_parts && rec_per_key[1] ? rec_per_key[1] : 1; records= (double) records / f2 * f1; } else