summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRemko Tronçon <git@el-tramo.be>2009-06-20 14:36:56 (GMT)
committerRemko Tronçon <git@el-tramo.be>2009-06-20 14:38:59 (GMT)
commitbb0dc4a60625c94fac1fb8dada797243b2b83c9e (patch)
tree7232d58bd81a8969fa0074f6ba992b3f2d451985 /Swiften
parent6eb30e0e1f0a8e7ee936f3c006c7f710785653df (diff)
downloadswift-bb0dc4a60625c94fac1fb8dada797243b2b83c9e.zip
swift-bb0dc4a60625c94fac1fb8dada797243b2b83c9e.tar.bz2
Fixed a bug where SHA1 would alter the input.
Diffstat (limited to 'Swiften')
-rw-r--r--Swiften/StringCodecs/SHA1.cpp3
-rw-r--r--Swiften/StringCodecs/UnitTest/SHA1Test.cpp10
2 files changed, 12 insertions, 1 deletions
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<http://jabber.org/protocol/caps<http://jabber.org/protocol/disco#info<http://jabber.org/protocol/disco#items<http://jabber.org/protocol/muc<");
+ SHA1::getBinaryHash(input);
+ ByteArray result(SHA1::getBinaryHash(input));
+
+ 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 testGetHexHash() {
String result(SHA1::getHexHash("client/pc//Exodus 0.9.1<http://jabber.org/protocol/caps<http://jabber.org/protocol/disco#info<http://jabber.org/protocol/disco#items<http://jabber.org/protocol/muc<"));
CPPUNIT_ASSERT_EQUAL(String("4206b23ca6b0a643d20d89b04ff58cf78b8096ed"), result);