summaryrefslogtreecommitdiff
path: root/cryptlib.cpp
diff options
context:
space:
mode:
authorJeffrey Walton <noloader@gmail.com>2017-12-16 18:18:53 -0500
committerJeffrey Walton <noloader@gmail.com>2017-12-16 18:18:53 -0500
commit19deccf3ba64a50c97c29d519ca9bfaec234c267 (patch)
tree277732b4d323593c88566bd689f6bf9ed53f3f45 /cryptlib.cpp
parentdc21de24831a140e38597166d2e62febfd19b0fb (diff)
downloadcryptopp-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.cpp13
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;