From 07152630c3a9d04dd86f7b370ee30b553665f5c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Remko=20Tron=C3=A7on?= Date: Wed, 13 Apr 2011 21:46:24 +0200 Subject: Chop off trailing \0 in ByteArray::toString(). 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 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(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(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 #include "Swiften/Base/ByteArray.h" +#include 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); -- cgit v0.10.2-6-g49f6