diff options
author | Igor Babaev <igor@askmonty.org> | 2017-03-26 22:59:33 -0700 |
---|---|---|
committer | Igor Babaev <igor@askmonty.org> | 2017-03-26 23:00:28 -0700 |
commit | ad7da60deda2cf97e60118a58f50f648abde6448 (patch) | |
tree | 00e488da434c5c51b7a882ed45f1279b16809035 /sql/sql_derived.cc | |
parent | 5a4537f09296a1c6151c8dfc35ecad7584aa55c4 (diff) | |
download | mariadb-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.cc | 9 |
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 { |