summaryrefslogtreecommitdiff
path: root/sql/sql_derived.cc
diff options
context:
space:
mode:
authorIgor Babaev <igor@askmonty.org>2017-03-26 22:59:33 -0700
committerIgor Babaev <igor@askmonty.org>2017-03-26 23:00:28 -0700
commitad7da60deda2cf97e60118a58f50f648abde6448 (patch)
tree00e488da434c5c51b7a882ed45f1279b16809035 /sql/sql_derived.cc
parent5a4537f09296a1c6151c8dfc35ecad7584aa55c4 (diff)
downloadmariadb-git-ad7da60deda2cf97e60118a58f50f648abde6448.tar.gz
Fixed bug mdev-12368.
Mutually recursive CTE could cause a crash of the server in the case when they were not Standard compliant. The crash happened in mysql_derived_prepare(), because the destructor the derived_result object created for a CTE that was mutually recursive with some others was called twice. Yet this destructor should not be called for resursive references.
Diffstat (limited to 'sql/sql_derived.cc')
-rw-r--r--sql/sql_derived.cc9
1 files changed, 6 insertions, 3 deletions
diff --git a/sql/sql_derived.cc b/sql/sql_derived.cc
index 76cb27d7d62..faf6dd790a6 100644
--- a/sql/sql_derived.cc
+++ b/sql/sql_derived.cc
@@ -789,9 +789,12 @@ exit:
*/
if (res)
{
- if (derived->table && !derived->is_with_table_recursive_reference())
- free_tmp_table(thd, derived->table);
- delete derived->derived_result;
+ if (!derived->is_with_table_recursive_reference())
+ {
+ if (derived->table)
+ free_tmp_table(thd, derived->table);
+ delete derived->derived_result;
+ }
}
else
{