From 33e3f72d246ce58336a52c24d5bbb31fdd02600b Mon Sep 17 00:00:00 2001 From: jeffro256 Date: Fri, 17 Nov 2023 02:19:45 -0600 Subject: serialization: fix infinite loops and clean up dispatching Resolves #8687 --- src/serialization/container.h | 4 +- src/serialization/debug_archive.h | 10 ++- src/serialization/difficulty_type.h | 2 - src/serialization/pair.h | 4 +- src/serialization/serialization.h | 125 +++++++----------------------------- src/serialization/tuple.h | 2 +- src/serialization/variant.h | 45 +++++-------- 7 files changed, 49 insertions(+), 143 deletions(-) (limited to 'src/serialization') diff --git a/src/serialization/container.h b/src/serialization/container.h index 7b59e9408..c64549c1e 100644 --- a/src/serialization/container.h +++ b/src/serialization/container.h @@ -42,7 +42,7 @@ namespace serialization typename std::enable_if(), bool>::type serialize_container_element(Archive& ar, T& e) { - return ::do_serialize(ar, e); + return do_serialize(ar, e); } template @@ -52,7 +52,7 @@ namespace serialization static constexpr const bool previously_varint = std::is_same() || std::is_same(); if (!previously_varint && ar.varint_bug_backward_compatibility_enabled() && !typename Archive::is_saving()) - return ::do_serialize(ar, e); + return do_serialize(ar, e); ar.serialize_varint(e); return true; } diff --git a/src/serialization/debug_archive.h b/src/serialization/debug_archive.h index 479ed0cac..b05cd773e 100644 --- a/src/serialization/debug_archive.h +++ b/src/serialization/debug_archive.h @@ -42,14 +42,12 @@ struct debug_archive : public json_archive { }; template -struct serializer, T> +static inline bool do_serialize(debug_archive &ar, T &v) { - static void serialize(debug_archive &ar, T &v) - { ar.begin_object(); ar.tag(variant_serialization_traits, T>::get_tag()); - serializer, T>::serialize(ar, v); + do_serialize(static_cast&>(ar), v); ar.end_object(); ar.stream() << std::endl; - } -}; + return true; +} diff --git a/src/serialization/difficulty_type.h b/src/serialization/difficulty_type.h index b13693c26..80b5a806b 100644 --- a/src/serialization/difficulty_type.h +++ b/src/serialization/difficulty_type.h @@ -31,8 +31,6 @@ #include "cryptonote_basic/difficulty.h" #include "serialization.h" -template<> struct is_basic_type { typedef boost::true_type type; }; - template