summaryrefslogtreecommitdiff
path: root/sql/sql_explain.cc
diff options
context:
space:
mode:
authorMichael Widenius <monty@mariadb.org>2017-11-14 07:47:58 +0200
committerMichael Widenius <monty@mariadb.org>2017-11-17 07:30:05 +0200
commit87933d52619c3f0df84922e23d5a8b03fa050133 (patch)
tree6e495d5f9bf731b055a4d7a582fa092d19c5929f /sql/sql_explain.cc
parent31bd86c8df63a4d9e98d67541e136456bd6d9cc2 (diff)
downloadmariadb-git-87933d52619c3f0df84922e23d5a8b03fa050133.tar.gz
Handle failures from malloc
Most "new" failures fixed in the following files: - sql_select.cc - item.cc - item_func.cc - opt_subselect.cc Other things: - Allocate udf_handler strings in mem_root - Required changes in sql_string.h - Add mem_root as argument to some new [] calls - Mark udf_handler strings as thread specific - Removed some comment blocks with code
Diffstat (limited to 'sql/sql_explain.cc')
-rw-r--r--sql/sql_explain.cc27
1 files changed, 17 insertions, 10 deletions
diff --git a/sql/sql_explain.cc b/sql/sql_explain.cc
index 05df9a21572..660d68427d1 100644
--- a/sql/sql_explain.cc
+++ b/sql/sql_explain.cc
@@ -1143,33 +1143,37 @@ void Explain_table_access::fill_key_len_str(String *key_len_str) const
}
-void Explain_index_use::set(MEM_ROOT *mem_root, KEY *key, uint key_len_arg)
+bool Explain_index_use::set(MEM_ROOT *mem_root, KEY *key, uint key_len_arg)
{
- set_pseudo_key(mem_root, key->name.str);
+ if (set_pseudo_key(mem_root, key->name.str))
+ return 1;
+
key_len= key_len_arg;
uint len= 0;
for (uint i= 0; i < key->usable_key_parts; i++)
{
- key_parts_list.append_str(mem_root,
- key->key_part[i].field->field_name.str);
+ if (!key_parts_list.append_str(mem_root,
+ key->key_part[i].field->field_name.str))
+ return 1;
len += key->key_part[i].store_length;
if (len >= key_len_arg)
break;
}
+ return 0;
}
-void Explain_index_use::set_pseudo_key(MEM_ROOT *root, const char* key_name_arg)
+bool Explain_index_use::set_pseudo_key(MEM_ROOT *root, const char* key_name_arg)
{
if (key_name_arg)
{
- size_t name_len= strlen(key_name_arg);
- if ((key_name= (char*)alloc_root(root, name_len+1)))
- memcpy(key_name, key_name_arg, name_len+1);
+ if (!(key_name= strdup_root(root, key_name_arg)))
+ return 1;
}
else
key_name= NULL;
key_len= ~(uint) 0;
+ return 0;
}
@@ -2450,8 +2454,11 @@ int Explain_range_checked_fer::append_possible_keys_stat(MEM_ROOT *alloc,
for (j= 0; j < table->s->keys; j++)
{
if (possible_keys.is_set(j))
- keys_stat_names[j]= key_set.append_str(alloc,
- table->key_info[j].name.str);
+ {
+ if (!(keys_stat_names[j]= key_set.append_str(alloc,
+ table->key_info[j].name.str)))
+ return 1;
+ }
else
keys_stat_names[j]= NULL;
}