diff --git a/Foundation/src/Base32Decoder.cpp b/Foundation/src/Base32Decoder.cpp index 4e49effe40..8d6be3ecd9 100644 --- a/Foundation/src/Base32Decoder.cpp +++ b/Foundation/src/Base32Decoder.cpp @@ -171,6 +171,7 @@ Base32DecoderBuf* Base32DecoderIOS::rdbuf() Base32Decoder::Base32Decoder(std::istream& istr): Base32DecoderIOS(istr), std::istream(&_buf) { + unsetf(std::ios_base::skipws); } diff --git a/Foundation/src/Base64Decoder.cpp b/Foundation/src/Base64Decoder.cpp index 73695a5735..decd6b41fc 100644 --- a/Foundation/src/Base64Decoder.cpp +++ b/Foundation/src/Base64Decoder.cpp @@ -147,6 +147,7 @@ Base64DecoderBuf* Base64DecoderIOS::rdbuf() Base64Decoder::Base64Decoder(std::istream& istr): Base64DecoderIOS(istr), std::istream(&_buf) { + unsetf(std::ios_base::skipws); } diff --git a/Foundation/testsuite/src/Base32Test.cpp b/Foundation/testsuite/src/Base32Test.cpp index 37a6fab7ee..4d53aa2008 100644 --- a/Foundation/testsuite/src/Base32Test.cpp +++ b/Foundation/testsuite/src/Base32Test.cpp @@ -37,6 +37,8 @@ #include "Poco/Base32Decoder.h" #include "Poco/Exception.h" #include +#include +#include using Poco::Base32Encoder; @@ -182,6 +184,19 @@ void Base32Test::testEncodeDecode() } +void Base32Test::testDecodeCR() +{ + std::istringstream input("BU======"); + Poco::Base32Decoder decoder(input); + std::vector result; + typedef std::istream_iterator istream_iterator_type; + istream_iterator_type eos; + std::copy(istream_iterator_type(decoder), eos, std::back_inserter(result)); + assert(1 == result.size()); + assert(0x0d == result[0]); +} + + void Base32Test::setUp() { } @@ -199,6 +214,7 @@ CppUnit::Test* Base32Test::suite() CppUnit_addTest(pSuite, Base32Test, testEncoder); CppUnit_addTest(pSuite, Base32Test, testDecoder); CppUnit_addTest(pSuite, Base32Test, testEncodeDecode); + CppUnit_addTest(pSuite, Base32Test, testDecodeCR); return pSuite; } diff --git a/Foundation/testsuite/src/Base32Test.h b/Foundation/testsuite/src/Base32Test.h index 509c19954c..b3f34f3e0d 100644 --- a/Foundation/testsuite/src/Base32Test.h +++ b/Foundation/testsuite/src/Base32Test.h @@ -49,6 +49,7 @@ class Base32Test: public CppUnit::TestCase void testEncoder(); void testDecoder(); void testEncodeDecode(); + void testDecodeCR(); void setUp(); void tearDown(); diff --git a/Foundation/testsuite/src/Base64Test.cpp b/Foundation/testsuite/src/Base64Test.cpp index cb099c33c7..f214859299 100644 --- a/Foundation/testsuite/src/Base64Test.cpp +++ b/Foundation/testsuite/src/Base64Test.cpp @@ -37,6 +37,8 @@ #include "Poco/Base64Decoder.h" #include "Poco/Exception.h" #include +#include +#include using Poco::Base64Encoder; @@ -177,6 +179,19 @@ void Base64Test::testEncodeDecode() } +void Base64Test::testDecodeCR() +{ + std::istringstream input("DQ=="); + Poco::Base64Decoder decoder(input); + std::vector result; + typedef std::istream_iterator istream_iterator_type; + istream_iterator_type eos; + std::copy(istream_iterator_type(decoder), eos, std::back_inserter(result)); + assert(1 == result.size()); + assert(0x0d == result[0]); +} + + void Base64Test::setUp() { } @@ -194,6 +209,7 @@ CppUnit::Test* Base64Test::suite() CppUnit_addTest(pSuite, Base64Test, testEncoder); CppUnit_addTest(pSuite, Base64Test, testDecoder); CppUnit_addTest(pSuite, Base64Test, testEncodeDecode); + CppUnit_addTest(pSuite, Base64Test, testDecodeCR); return pSuite; } diff --git a/Foundation/testsuite/src/Base64Test.h b/Foundation/testsuite/src/Base64Test.h index f7b85de830..dc80ca2eb7 100644 --- a/Foundation/testsuite/src/Base64Test.h +++ b/Foundation/testsuite/src/Base64Test.h @@ -49,6 +49,7 @@ class Base64Test: public CppUnit::TestCase void testEncoder(); void testDecoder(); void testEncodeDecode(); + void testDecodeCR(); void setUp(); void tearDown();