diff options
author | Remko Tronçon <git@el-tramo.be> | 2011-04-13 19:46:24 (GMT) |
---|---|---|
committer | Remko Tronçon <git@el-tramo.be> | 2011-04-18 19:11:43 (GMT) |
commit | 07152630c3a9d04dd86f7b370ee30b553665f5c7 (patch) | |
tree | 5b3f57a46d6a4ae1f6a6c60cb095866a0e752ef9 | |
parent | 68b51298da4fcfcdc3bb81a9abba6c56809ae1b7 (diff) | |
download | swift-07152630c3a9d04dd86f7b370ee30b553665f5c7.zip swift-07152630c3a9d04dd86f7b370ee30b553665f5c7.tar.bz2 |
Chop off trailing \0 in ByteArray::toString().
-rw-r--r-- | Swiften/Base/ByteArray.cpp | 10 | ||||
-rw-r--r-- | Swiften/Base/ByteArray.h | 4 | ||||
-rw-r--r-- | Swiften/Base/UnitTest/ByteArrayTest.cpp | 12 |
3 files changed, 21 insertions, 5 deletions
diff --git a/Swiften/Base/ByteArray.cpp b/Swiften/Base/ByteArray.cpp index c3869fc..323c866 100644 --- a/Swiften/Base/ByteArray.cpp +++ b/Swiften/Base/ByteArray.cpp @@ -72,4 +72,14 @@ std::vector<unsigned char> ByteArray::create(const unsigned char* c, size_t n) { return data; } +std::string ByteArray::toString() const { + size_t i; + for (i = data_.size(); i > 0; --i) { + if (data_[i - 1] != 0) { + break; + } + } + return i > 0 ? std::string(reinterpret_cast<const char*>(getData()), i) : ""; +} + } diff --git a/Swiften/Base/ByteArray.h b/Swiften/Base/ByteArray.h index d55da1f..ebc22d8 100644 --- a/Swiften/Base/ByteArray.h +++ b/Swiften/Base/ByteArray.h @@ -120,9 +120,7 @@ namespace Swift { return data_.end(); } - std::string toString() const { - return std::string(reinterpret_cast<const char*>(getData()), getSize()); - } + std::string toString() const; void readFromFile(const std::string& file); diff --git a/Swiften/Base/UnitTest/ByteArrayTest.cpp b/Swiften/Base/UnitTest/ByteArrayTest.cpp index b9797d2..069e68e 100644 --- a/Swiften/Base/UnitTest/ByteArrayTest.cpp +++ b/Swiften/Base/UnitTest/ByteArrayTest.cpp @@ -8,6 +8,7 @@ #include <cppunit/extensions/TestFactoryRegistry.h> #include "Swiften/Base/ByteArray.h" +#include <boost/lexical_cast.hpp> using namespace Swift; @@ -17,6 +18,7 @@ class ByteArrayTest : public CppUnit::TestFixture { CPPUNIT_TEST(testToString); CPPUNIT_TEST(testToString_NullTerminated); CPPUNIT_TEST(testToString_TwoNullTerminated); + CPPUNIT_TEST(testToString_AllNull); CPPUNIT_TEST_SUITE_END(); public: @@ -33,16 +35,22 @@ class ByteArrayTest : public CppUnit::TestFixture { } void testToString_NullTerminated() { - ByteArray testling(ByteArray::create("abcde\0")); + ByteArray testling(ByteArray::create("abcde\0", 6)); CPPUNIT_ASSERT_EQUAL(std::string("abcde"), testling.toString()); } void testToString_TwoNullTerminated() { - ByteArray testling(ByteArray::create("abcde\0\0")); + ByteArray testling(ByteArray::create("abcde\0\0", 7)); CPPUNIT_ASSERT_EQUAL(std::string("abcde"), testling.toString()); } + + void testToString_AllNull() { + ByteArray testling(ByteArray::create("\0\0", 2)); + + CPPUNIT_ASSERT_EQUAL(std::string(""), testling.toString()); + } }; CPPUNIT_TEST_SUITE_REGISTRATION(ByteArrayTest); |