summaryrefslogtreecommitdiffstats
path: root/Source/cmCryptoHash.cxx
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2013-06-10 20:52:16 (GMT)
committerBrad King <brad.king@kitware.com>2013-06-13 12:40:10 (GMT)
commit75994d953e261b388aa31e4d8ecd8af9fe53142b (patch)
tree4364cfc72ebc4b32fba7d39b732202a243cb7982 /Source/cmCryptoHash.cxx
parent5dd8c01429da90a7417b72f17e784cc98f70f57c (diff)
downloadCMake-75994d953e261b388aa31e4d8ecd8af9fe53142b.zip
CMake-75994d953e261b388aa31e4d8ecd8af9fe53142b.tar.gz
CMake-75994d953e261b388aa31e4d8ecd8af9fe53142b.tar.bz2
cmCryptoHash: Increase alignment of HashFile buffer
The SHA512_Update implementation accesses input data via 64-bit integers. This requires alignment of the input buffer on some architectures. Align our stack-allocated buffer for file content to satisfy this requirement.
Diffstat (limited to 'Source/cmCryptoHash.cxx')
-rw-r--r--Source/cmCryptoHash.cxx6
1 files changed, 3 insertions, 3 deletions
diff --git a/Source/cmCryptoHash.cxx b/Source/cmCryptoHash.cxx
index a1505bd..a4f6ac4 100644
--- a/Source/cmCryptoHash.cxx
+++ b/Source/cmCryptoHash.cxx
@@ -54,8 +54,8 @@ std::string cmCryptoHash::HashFile(const char* file)
this->Initialize();
// Should be efficient enough on most system:
- const int bufferSize = 4096;
- char buffer[bufferSize];
+ cm_sha2_uint64_t buffer[512];
+ char* buffer_c = reinterpret_cast<char*>(buffer);
unsigned char const* buffer_uc =
reinterpret_cast<unsigned char const*>(buffer);
// This copy loop is very sensitive on certain platforms with
@@ -65,7 +65,7 @@ std::string cmCryptoHash::HashFile(const char* file)
// error occurred. Therefore, the loop should be safe everywhere.
while(fin)
{
- fin.read(buffer, bufferSize);
+ fin.read(buffer_c, sizeof(buffer));
if(int gcount = static_cast<int>(fin.gcount()))
{
this->Append(buffer_uc, gcount);