[Libreoffice-commits] core.git: comphelper/source
Eike Rathke
erack at redhat.com
Mon Feb 26 14:36:14 UTC 2018
comphelper/source/misc/hash.cxx | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
New commits:
commit e95618d754ee4e75632ed5f2bc29b8a021f45731
Author: Eike Rathke <erack at redhat.com>
Date: Mon Feb 26 15:33:57 2018 +0100
Swap UTF16-BE to UTF16-LE in Hash::calculateHash()
Change-Id: I3727eefe795efcc3cc0a199ed3c3efc358145c87
diff --git a/comphelper/source/misc/hash.cxx b/comphelper/source/misc/hash.cxx
index ad0a247ae7f6..2101bee64629 100644
--- a/comphelper/source/misc/hash.cxx
+++ b/comphelper/source/misc/hash.cxx
@@ -223,6 +223,22 @@ std::vector<unsigned char> Hash::calculateHash(
{
const unsigned char* pPassBytes = reinterpret_cast<const unsigned char*>(rPassword.getStr());
const size_t nPassBytesLen = rPassword.getLength() * 2;
+#ifdef OSL_BIGENDIAN
+ // Swap UTF16-BE to UTF16-LE
+ std::vector<unsigned char> vPass;
+ if (nPassBytesLen)
+ {
+ vPass.resize( nPassBytesLen);
+ std::copy( pPassBytes, pPassBytes + nPassBytesLen, vPass.begin());
+ sal_uInt8* p = reinterpret_cast<sal_uInt8*>(vPass.data());
+ sal_uInt8 const * const pEnd = p + nPassBytesLen;
+ for ( ; p < pEnd; p += 2 )
+ {
+ std::swap( p[0], p[1] );
+ }
+ pPassBytes = vPass.data();
+ }
+#endif
return calculateHash( pPassBytes, nPassBytesLen, rSaltValue.data(), rSaltValue.size(), nSpinCount,
bPrependNotAppend, eType);
}
More information about the Libreoffice-commits
mailing list