diff --git a/Foundation/include/Poco/Platform.h b/Foundation/include/Poco/Platform.h index 84c085b0a..9fee21c3d 100644 --- a/Foundation/include/Poco/Platform.h +++ b/Foundation/include/Poco/Platform.h @@ -211,6 +211,11 @@ #endif +#if !defined(POCO_ARCH) + #error "Unknown or Unsupported Hardware Architecture." +#endif + + #if defined(_MSC_VER) #define POCO_COMPILER_MSVC #elif defined(__clang__) @@ -239,11 +244,8 @@ #define POCO_COMPILER_IBM_XLC // IBM XL C++ #elif defined (__IBMCPP__) && defined(__COMPILER_VER__) #define POCO_COMPILER_IBM_XLC_ZOS // IBM z/OS C++ -#endif - - -#if !defined(POCO_ARCH) - #error "Unknown Hardware Architecture." +#else + #error "Unknown or Unsupported Compiler." #endif diff --git a/Foundation/src/Base32Decoder.cpp b/Foundation/src/Base32Decoder.cpp index 4e49effe4..135269037 100644 --- a/Foundation/src/Base32Decoder.cpp +++ b/Foundation/src/Base32Decoder.cpp @@ -171,6 +171,9 @@ Base32DecoderBuf* Base32DecoderIOS::rdbuf() Base32Decoder::Base32Decoder(std::istream& istr): Base32DecoderIOS(istr), std::istream(&_buf) { +#ifdef POCO_OS_FAMILY_WINDOWS + unsetf(std::ios_base::skipws); +#endif } diff --git a/Foundation/src/Base64Decoder.cpp b/Foundation/src/Base64Decoder.cpp index 73695a573..b9c4be3d9 100644 --- a/Foundation/src/Base64Decoder.cpp +++ b/Foundation/src/Base64Decoder.cpp @@ -147,6 +147,9 @@ Base64DecoderBuf* Base64DecoderIOS::rdbuf() Base64Decoder::Base64Decoder(std::istream& istr): Base64DecoderIOS(istr), std::istream(&_buf) { +#ifdef POCO_OS_FAMILY_WINDOWS + unsetf(std::ios_base::skipws); +#endif } diff --git a/Foundation/testsuite/src/Base32Test.cpp b/Foundation/testsuite/src/Base32Test.cpp index 37a6fab7e..4d53aa200 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 509c19954..b3f34f3e0 100644 --- a/Foundation/testsuite/src/Base32Test.h +++ b/Foundation/testsuite/src/Base32Test.h @@ -49,6 +49,7 @@ public: 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 cb099c33c..f21485929 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 f7b85de83..dc80ca2eb 100644 --- a/Foundation/testsuite/src/Base64Test.h +++ b/Foundation/testsuite/src/Base64Test.h @@ -49,6 +49,7 @@ public: void testEncoder(); void testDecoder(); void testEncodeDecode(); + void testDecodeCR(); void setUp(); void tearDown();