summaryrefslogtreecommitdiff
path: root/sql/sql_update.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_update.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_update.cc')
-rw-r--r--sql/sql_update.cc11
1 files changed, 7 insertions, 4 deletions
diff --git a/sql/sql_update.cc b/sql/sql_update.cc
index 47ec8b89d48..bd577426483 100644
--- a/sql/sql_update.cc
+++ b/sql/sql_update.cc
@@ -451,7 +451,8 @@ int mysql_update(THD *thd,
goto err;
}
}
- init_ftfuncs(thd, select_lex, 1);
+ if (init_ftfuncs(thd, select_lex, 1))
+ goto err;
table->mark_columns_needed_for_update();
@@ -522,7 +523,8 @@ int mysql_update(THD *thd,
*/
if (thd->lex->describe)
goto produce_explain_and_leave;
- explain= query_plan.save_explain_update_data(query_plan.mem_root, thd);
+ if (!(explain= query_plan.save_explain_update_data(query_plan.mem_root, thd)))
+ goto err;
ANALYZE_START_TRACKING(&explain->command_tracker);
@@ -1046,7 +1048,8 @@ produce_explain_and_leave:
We come here for various "degenerate" query plans: impossible WHERE,
no-partitions-used, impossible-range, etc.
*/
- query_plan.save_explain_update_data(query_plan.mem_root, thd);
+ if (!query_plan.save_explain_update_data(query_plan.mem_root, thd))
+ goto err;
emit_explain_and_leave:
int err2= thd->lex->explain->send_explain(thd);
@@ -1776,7 +1779,7 @@ int multi_update::prepare(List<Item> &not_used_values,
switch_to_nullable_trigger_fields(*values_for_table[i], table);
}
}
- copy_field= new Copy_field[max_fields];
+ copy_field= new (thd->mem_root) Copy_field[max_fields];
DBUG_RETURN(thd->is_fatal_error != 0);
}