From f6d51f1989d10677b0a5d754a80be601a0487bf9 Mon Sep 17 00:00:00 2001 From: Kevin Heifner Date: Thu, 23 Feb 2023 07:31:57 -0600 Subject: [PATCH 1/2] GH-741 Reverted interface change to deprecated methods. Changed from rvalue reference to value so backward compatible for those using abi_serializer via tester. --- libraries/chain/abi_serializer.cpp | 12 ++++++------ .../chain/include/eosio/chain/abi_serializer.hpp | 8 ++++---- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/libraries/chain/abi_serializer.cpp b/libraries/chain/abi_serializer.cpp index 27473f61c7..58e56bcf02 100644 --- a/libraries/chain/abi_serializer.cpp +++ b/libraries/chain/abi_serializer.cpp @@ -70,14 +70,14 @@ namespace eosio { namespace chain { ); } - abi_serializer::abi_serializer( abi_def&& abi, const yield_function_t& yield ) { + abi_serializer::abi_serializer( abi_def abi, const yield_function_t& yield ) { configure_built_in_types(); set_abi(std::move(abi), yield); } - abi_serializer::abi_serializer( abi_def&& abi, const fc::microseconds& max_serialization_time) { + abi_serializer::abi_serializer( const abi_def& abi, const fc::microseconds& max_serialization_time) { configure_built_in_types(); - set_abi(std::move(abi), create_yield_function(max_serialization_time)); + set_abi(abi, create_yield_function(max_serialization_time)); } void abi_serializer::add_specialized_unpack_pack( const string& name, @@ -128,7 +128,7 @@ namespace eosio { namespace chain { built_in_types.emplace("extended_asset", pack_unpack()); } - void abi_serializer::set_abi(abi_def&& abi, const yield_function_t& yield) { + void abi_serializer::set_abi(abi_def abi, const yield_function_t& yield) { impl::abi_traverse_context ctx(yield); EOS_ASSERT(starts_with(abi.version, "eosio::abi/1."), unsupported_abi_version_exception, "ABI has an unsupported version"); @@ -188,8 +188,8 @@ namespace eosio { namespace chain { validate(ctx); } - void abi_serializer::set_abi(abi_def&& abi, const fc::microseconds& max_serialization_time) { - return set_abi(std::move(abi), create_yield_function(max_serialization_time)); + void abi_serializer::set_abi(const abi_def& abi, const fc::microseconds& max_serialization_time) { + return set_abi(abi, create_yield_function(max_serialization_time)); } bool abi_serializer::is_builtin_type(const std::string_view& type)const { diff --git a/libraries/chain/include/eosio/chain/abi_serializer.hpp b/libraries/chain/include/eosio/chain/abi_serializer.hpp index f67b9a400f..c630940139 100644 --- a/libraries/chain/include/eosio/chain/abi_serializer.hpp +++ b/libraries/chain/include/eosio/chain/abi_serializer.hpp @@ -35,12 +35,12 @@ struct abi_serializer { using yield_function_t = fc::optional_delegate; abi_serializer(){ configure_built_in_types(); } - abi_serializer( abi_def&& abi, const yield_function_t& yield ); + abi_serializer( abi_def abi, const yield_function_t& yield ); [[deprecated("use the overload with yield_function_t[=create_yield_function(max_serialization_time)]")]] - abi_serializer( abi_def&& abi, const fc::microseconds& max_serialization_time ); - void set_abi( abi_def&& abi, const yield_function_t& yield ); + abi_serializer( const abi_def& abi, const fc::microseconds& max_serialization_time ); + void set_abi( abi_def abi, const yield_function_t& yield ); [[deprecated("use the overload with yield_function_t[=create_yield_function(max_serialization_time)]")]] - void set_abi( abi_def&& abi, const fc::microseconds& max_serialization_time); + void set_abi(const abi_def& abi, const fc::microseconds& max_serialization_time); /// @return string_view of `t` or internal string type std::string_view resolve_type(const std::string_view& t)const; From b4f18d5d20aaed4f47cb83c48d1aacb5f05c9b01 Mon Sep 17 00:00:00 2001 From: Kevin Heifner Date: Thu, 23 Feb 2023 07:58:58 -0600 Subject: [PATCH 2/2] GH-741 Don't std::move abi since it is used after. --- plugins/chain_plugin/chain_plugin.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/chain_plugin/chain_plugin.cpp b/plugins/chain_plugin/chain_plugin.cpp index 882d54f54f..cb5b9cbe17 100644 --- a/plugins/chain_plugin/chain_plugin.cpp +++ b/plugins/chain_plugin/chain_plugin.cpp @@ -1697,7 +1697,7 @@ read_only::get_producers_result read_only::get_producers( const read_only::get_producers_params& params, const fc::time_point& deadline ) const try { abi_def abi = eosio::chain_apis::get_abi(db, config::system_account_name); const auto table_type = get_table_type(abi, "producers"_n); - const abi_serializer abis{ std::move(abi), abi_serializer::create_yield_function( abi_serializer_max_time ) }; + const abi_serializer abis{ abi_def(abi), abi_serializer::create_yield_function( abi_serializer_max_time ) }; EOS_ASSERT(table_type == KEYi64, chain::contract_table_query_exception, "Invalid table type ${type} for table producers", ("type",table_type)); const auto& d = db.db();