From bb0dc4a60625c94fac1fb8dada797243b2b83c9e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Remko=20Tron=C3=A7on?= Date: Sat, 20 Jun 2009 16:36:56 +0200 Subject: Fixed a bug where SHA1 would alter the input. diff --git a/Swiften/StringCodecs/SHA1.cpp b/Swiften/StringCodecs/SHA1.cpp index 18fde71..e59836c 100644 --- a/Swiften/StringCodecs/SHA1.cpp +++ b/Swiften/StringCodecs/SHA1.cpp @@ -188,11 +188,12 @@ boost::uint8_t finalcount[8]; namespace Swift { ByteArray SHA1::getBinaryHash(const ByteArray& input) { + ByteArray inputCopy(input); ByteArray digest; digest.resize(20); SHA1_CTX context; SHA1Init(&context); - SHA1Update(&context, (boost::uint8_t*) input.getData(), input.getSize()); + SHA1Update(&context, (boost::uint8_t*) inputCopy.getData(), inputCopy.getSize()); SHA1Final((boost::uint8_t*) digest.getData(), &context); return digest; } diff --git a/Swiften/StringCodecs/UnitTest/SHA1Test.cpp b/Swiften/StringCodecs/UnitTest/SHA1Test.cpp index a6c7a72..e556429 100644 --- a/Swiften/StringCodecs/UnitTest/SHA1Test.cpp +++ b/Swiften/StringCodecs/UnitTest/SHA1Test.cpp @@ -9,6 +9,7 @@ class SHA1Test : public CppUnit::TestFixture { CPPUNIT_TEST_SUITE(SHA1Test); CPPUNIT_TEST(testGetBinaryHash); + CPPUNIT_TEST(testGetBinaryHash_Twice); CPPUNIT_TEST(testGetHexHash); CPPUNIT_TEST_SUITE_END(); @@ -20,6 +21,15 @@ class SHA1Test : public CppUnit::TestFixture CPPUNIT_ASSERT_EQUAL(ByteArray("\x42\x06\xb2\x3c\xa6\xb0\xa6\x43\xd2\x0d\x89\xb0\x4f\xf5\x8c\xf7\x8b\x80\x96\xed"), result); } + + void testGetBinaryHash_Twice() { + ByteArray input("client/pc//Exodus 0.9.1