From f45813bd129c1d58d4dd7a5e9fa3735f70293688 Mon Sep 17 00:00:00 2001 From: Jeffrey Walton Date: Fri, 5 Feb 2016 02:43:08 -0500 Subject: [PATCH] Use stdext::make_checked_array_iterator for reverse_copy on VS2008 and above (Issue 123) --- integer.cpp | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/integer.cpp b/integer.cpp index 3a670102..04613e38 100644 --- a/integer.cpp +++ b/integer.cpp @@ -2874,7 +2874,7 @@ signed long Integer::ConvertToLong() const Integer::Integer(BufferedTransformation &encodedInteger, size_t byteCount, Signedness s, ByteOrder o) { assert(o == BIG_ENDIAN_ORDER || o == LITTLE_ENDIAN_ORDER); - + if(o == LITTLE_ENDIAN_ORDER) { SecByteBlock block(byteCount); @@ -2884,23 +2884,27 @@ Integer::Integer(BufferedTransformation &encodedInteger, size_t byteCount, Signe Decode(block.begin(), block.size(), s); return; } - + Decode(encodedInteger, byteCount, s); } Integer::Integer(const byte *encodedInteger, size_t byteCount, Signedness s, ByteOrder o) { assert(o == BIG_ENDIAN_ORDER || o == LITTLE_ENDIAN_ORDER); - + if(o == LITTLE_ENDIAN_ORDER) { SecByteBlock block(byteCount); +#if (CRYPTOPP_MSC_VERSION >= 1500) + std::reverse_copy(encodedInteger, encodedInteger+byteCount, + stdext::make_checked_array_iterator(block.begin(), block.size())); +#else std::reverse_copy(encodedInteger, encodedInteger+byteCount, block.begin()); - +#endif Decode(block.begin(), block.size(), s); return; } - + Decode(encodedInteger, byteCount, s); }