From 69332401a6e1167a002a8ed8321428e1ec0ef100 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Del=20Pino?= <stephane.delpino44@gmail.com>
Date: Mon, 28 Mar 2022 16:32:32 +0200
Subject: [PATCH] Forbid dangerous(?) implicit conversion to
 AggregateDataVariant

Previously, std::vector<DataVariant> could be converted automatically
to AggregateDataVariant using the move constructor
---
 .../node_processor/ASTNodeExpressionListProcessor.hpp         | 2 +-
 src/language/node_processor/FunctionProcessor.hpp             | 2 +-
 src/language/utils/BuiltinFunctionEmbedder.hpp                | 4 ++--
 src/language/utils/DataVariant.hpp                            | 2 +-
 4 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/src/language/node_processor/ASTNodeExpressionListProcessor.hpp b/src/language/node_processor/ASTNodeExpressionListProcessor.hpp
index 713eda89a..21823176e 100644
--- a/src/language/node_processor/ASTNodeExpressionListProcessor.hpp
+++ b/src/language/node_processor/ASTNodeExpressionListProcessor.hpp
@@ -87,7 +87,7 @@ class ASTNodeExpressionListProcessor final : public INodeProcessor
     }
 
     Assert(list_values.size() == m_number_of_values);
-    return DataVariant{std::move(list_values)};
+    return AggregateDataVariant{std::move(list_values)};
   }
 
   ASTNodeExpressionListProcessor(ASTNode& node) : m_node{node}, m_number_of_values{this->_getNumberOfValues()} {}
diff --git a/src/language/node_processor/FunctionProcessor.hpp b/src/language/node_processor/FunctionProcessor.hpp
index c6c81d293..16e65e6e1 100644
--- a/src/language/node_processor/FunctionProcessor.hpp
+++ b/src/language/node_processor/FunctionProcessor.hpp
@@ -124,7 +124,7 @@ class FunctionProcessor : public INodeProcessor
       for (auto& function_expression_processor : m_function_expression_processors) {
         list_values.emplace_back(function_expression_processor->execute(context_exec_policy));
       }
-      return DataVariant{std::move(list_values)};
+      return AggregateDataVariant{std::move(list_values)};
     }
   }
 
diff --git a/src/language/utils/BuiltinFunctionEmbedder.hpp b/src/language/utils/BuiltinFunctionEmbedder.hpp
index 265379a36..ac3ba21fe 100644
--- a/src/language/utils/BuiltinFunctionEmbedder.hpp
+++ b/src/language/utils/BuiltinFunctionEmbedder.hpp
@@ -204,7 +204,7 @@ class BuiltinFunctionEmbedder<FX(Args...)> : public IBuiltinFunctionEmbedder
     std::apply([&](auto&&... result) { ((vector_result.emplace_back(_resultToDataVariant(result))), ...); },
                tuple_result);
 
-    return vector_result;
+    return AggregateDataVariant{std::move(vector_result)};
   }
 
  public:
@@ -337,7 +337,7 @@ class BuiltinFunctionEmbedder<FX(void)> : public IBuiltinFunctionEmbedder
     std::apply([&](auto&&... result) { ((vector_result.emplace_back(_resultToDataVariant(result))), ...); },
                tuple_result);
 
-    return vector_result;
+    return AggregateDataVariant{std::move(vector_result)};
   }
 
  public:
diff --git a/src/language/utils/DataVariant.hpp b/src/language/utils/DataVariant.hpp
index 964044c61..9a09cad6f 100644
--- a/src/language/utils/DataVariant.hpp
+++ b/src/language/utils/DataVariant.hpp
@@ -97,7 +97,7 @@ class AggregateDataVariant   // LCOV_EXCL_LINE
   AggregateDataVariant& operator=(const AggregateDataVariant&) = default;
   AggregateDataVariant& operator=(AggregateDataVariant&&) = default;
 
-  AggregateDataVariant(std::vector<DataVariant>&& data_vector) : m_data_vector{data_vector} {}
+  explicit AggregateDataVariant(std::vector<DataVariant>&& data_vector) : m_data_vector{data_vector} {}
 
   AggregateDataVariant(const AggregateDataVariant&) = default;
   AggregateDataVariant(AggregateDataVariant&&)      = default;
-- 
GitLab