diff options
| -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); | 
 Swift
 Swift