aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorluigi1111 <luigi1111w@gmail.com>2024-01-18 17:59:47 -0500
committerluigi1111 <luigi1111w@gmail.com>2024-01-18 17:59:47 -0500
commit6d00cf2c2d7a72d6f69fa9e2ee797eaafc2380a3 (patch)
treeb87dc2fb44dc68e4df93b379fdecb6c67b543e11
parentMerge pull request #9060 (diff)
parentAdd compile-time check for input iterators in ::wire array writing (diff)
downloadmonero-6d00cf2c2d7a72d6f69fa9e2ee797eaafc2380a3.tar.xz
Merge pull request #9061
085fdea Add compile-time check for input iterators in ::wire array writing (Lee *!* Clagett)
-rw-r--r--contrib/epee/include/serialization/wire/write.h9
1 files changed, 8 insertions, 1 deletions
diff --git a/contrib/epee/include/serialization/wire/write.h b/contrib/epee/include/serialization/wire/write.h
index c18f7dbcc..c2359918c 100644
--- a/contrib/epee/include/serialization/wire/write.h
+++ b/contrib/epee/include/serialization/wire/write.h
@@ -30,6 +30,7 @@
#include <boost/utility/string_ref.hpp>
#include <boost/range/size.hpp>
#include <cstdint>
+#include <iterator>
#include <system_error>
#include <type_traits>
@@ -188,7 +189,13 @@ namespace wire_write
template<typename T>
inline std::size_t array_size(std::true_type, const T& source)
- { return boost::size(source); }
+ {
+ static_assert(
+ !std::is_same<typename std::iterator_traits<typename T::const_iterator>::iterator_category, std::input_iterator_tag>{},
+ "Input iterators must use json (or similar) derived classes directly"
+ );
+ return boost::size(source);
+ }
template<typename T>
inline constexpr std::size_t array_size(std::false_type, const T&) noexcept