diff options
author | Jeffrey Walton <noloader@gmail.com> | 2017-12-16 18:18:53 -0500 |
---|---|---|
committer | Jeffrey Walton <noloader@gmail.com> | 2017-12-16 18:18:53 -0500 |
commit | 19deccf3ba64a50c97c29d519ca9bfaec234c267 (patch) | |
tree | 277732b4d323593c88566bd689f6bf9ed53f3f45 /cryptlib.cpp | |
parent | dc21de24831a140e38597166d2e62febfd19b0fb (diff) | |
download | cryptopp-git-19deccf3ba64a50c97c29d519ca9bfaec234c267.tar.gz |
Fix Clang 5.0 "runtime error: addition of unsigned offset to 0xXXXX overflowed to 0xYYYY" (GH #549)
Diffstat (limited to 'cryptlib.cpp')
-rw-r--r-- | cryptlib.cpp | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/cryptlib.cpp b/cryptlib.cpp index 03f0f0ff..55df7134 100644 --- a/cryptlib.cpp +++ b/cryptlib.cpp @@ -26,6 +26,7 @@ #include "osrng.h"
#include "secblock.h"
#include "smartptr.h"
+#include "stdcpp.h"
// http://www.cygwin.com/faq.html#faq.api.winsock
#if (defined(__CYGWIN__) || defined(__CYGWIN32__)) && defined(PREFER_WINDOWS_STYLE_SOCKETS)
@@ -147,14 +148,13 @@ size_t BlockTransformation::AdvancedProcessBlocks(const byte *inBlocks, const by CRYPTOPP_ASSERT(outBlocks);
CRYPTOPP_ASSERT(length);
- size_t blockSize = BlockSize();
- size_t inIncrement = (flags & (BT_InBlockIsCounter|BT_DontIncrementInOutPointers)) ? 0 : blockSize;
- size_t xorIncrement = xorBlocks ? blockSize : 0;
- size_t outIncrement = (flags & BT_DontIncrementInOutPointers) ? 0 : blockSize;
+ ptrdiff_t blockSize = static_cast<ptrdiff_t>(BlockSize());
+ ptrdiff_t inIncrement = (flags & (BT_InBlockIsCounter|BT_DontIncrementInOutPointers)) ? 0 : blockSize;
+ ptrdiff_t xorIncrement = xorBlocks ? blockSize : 0;
+ ptrdiff_t outIncrement = (flags & BT_DontIncrementInOutPointers) ? 0 : blockSize;
if (flags & BT_ReverseDirection)
{
- CRYPTOPP_ASSERT(length % blockSize == 0);
inBlocks += length - blockSize;
xorBlocks += length - blockSize;
outBlocks += length - blockSize;
@@ -164,7 +164,7 @@ size_t BlockTransformation::AdvancedProcessBlocks(const byte *inBlocks, const by }
// Coverity finding.
- bool xorFlag = xorBlocks && (flags & BT_XorInput);
+ const bool xorFlag = xorBlocks && (flags & BT_XorInput);
while (length >= blockSize)
{
if (xorFlag)
@@ -181,6 +181,7 @@ size_t BlockTransformation::AdvancedProcessBlocks(const byte *inBlocks, const by if (flags & BT_InBlockIsCounter)
const_cast<byte *>(inBlocks)[blockSize-1]++;
+
inBlocks += inIncrement;
outBlocks += outIncrement;
xorBlocks += xorIncrement;
|