You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4cxx-dev@logging.apache.org by ca...@apache.org on 2009/08/24 01:24:38 UTC
svn commit: r807031 - in /logging/log4cxx/trunk/src: changes/changes.xml
main/cpp/transcoder.cpp test/cpp/helpers/transcodertestcase.cpp
Author: carnold
Date: Sun Aug 23 23:24:37 2009
New Revision: 807031
URL: http://svn.apache.org/viewvc?rev=807031&view=rev
Log:
LOGCXX-340: Transcoder::encodeCharsetName bungles encoding
Modified:
logging/log4cxx/trunk/src/changes/changes.xml
logging/log4cxx/trunk/src/main/cpp/transcoder.cpp
logging/log4cxx/trunk/src/test/cpp/helpers/transcodertestcase.cpp
Modified: logging/log4cxx/trunk/src/changes/changes.xml
URL: http://svn.apache.org/viewvc/logging/log4cxx/trunk/src/changes/changes.xml?rev=807031&r1=807030&r2=807031&view=diff
==============================================================================
--- logging/log4cxx/trunk/src/changes/changes.xml (original)
+++ logging/log4cxx/trunk/src/changes/changes.xml Sun Aug 23 23:24:37 2009
@@ -22,7 +22,7 @@
<title>Apache log4cxx</title>
</properties>
<body>
-<release version="0.11.0" date="2008-XX-XX" description="Maintenance release">
+<release version="0.11.0" date="2009-XX-XX" description="Maintenance release">
<action issue="LOGCXX-249">Console appender crashes if layout is not set</action>
<action issue="LOGCXX-262">socketappendertestcase and xmlsocketappendertestcase not run</action>
<action issue="LOGCXX-263">Bad link to log4cxx-dev archive</action>
@@ -52,6 +52,7 @@
<action issue="LOGCXX-300">ODBCAppender connection settings broken (or just have changed).</action>
<action issue="LOGCXX-303">DOMConfigurator does not set ErrorHandler.</action>
<action issue="LOGCXX-304">BasicConfigurator::configure results in writer not set warning.</action>
+<action issue="LOGCXX-340">Transcoder::encodeCharsetName bungles encoding</action>
</release>
<release version="0.10.0" date="2008-04-03" description="First Apache release">
<action issue="LOGCXX-2">logger.h includes config.h</action>
Modified: logging/log4cxx/trunk/src/main/cpp/transcoder.cpp
URL: http://svn.apache.org/viewvc/logging/log4cxx/trunk/src/main/cpp/transcoder.cpp?rev=807031&r1=807030&r2=807031&view=diff
==============================================================================
--- logging/log4cxx/trunk/src/main/cpp/transcoder.cpp (original)
+++ logging/log4cxx/trunk/src/main/cpp/transcoder.cpp Sun Aug 23 23:24:37 2009
@@ -523,13 +523,13 @@
'@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',
'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '[', '\\', ']', '^', '_',
'`', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o',
- 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '{', '|', '}', '~', ' ' };
+ 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '{', '|', '}', '~' };
std::string out;
for(LogString::const_iterator iter = val.begin();
iter != val.end();
iter++) {
- if (*iter >= 0x30 && *iter < 0x7F) {
- out.append(1, asciiTable[*iter - 0x30]);
+ if (*iter >= 0x20 && *iter < 0x7F) {
+ out.append(1, asciiTable[*iter - 0x20]);
} else {
out.append(1, LOSSCHAR);
}
Modified: logging/log4cxx/trunk/src/test/cpp/helpers/transcodertestcase.cpp
URL: http://svn.apache.org/viewvc/logging/log4cxx/trunk/src/test/cpp/helpers/transcodertestcase.cpp?rev=807031&r1=807030&r2=807031&view=diff
==============================================================================
--- logging/log4cxx/trunk/src/test/cpp/helpers/transcodertestcase.cpp (original)
+++ logging/log4cxx/trunk/src/test/cpp/helpers/transcodertestcase.cpp Sun Aug 23 23:24:37 2009
@@ -60,7 +60,9 @@
LOGUNIT_TEST(uencode3);
LOGUNIT_TEST(uencode5);
#endif
-
+ LOGUNIT_TEST(encodeCharsetName1);
+ LOGUNIT_TEST(encodeCharsetName2);
+ LOGUNIT_TEST(encodeCharsetName3);
LOGUNIT_TEST_SUITE_END();
@@ -304,6 +306,34 @@
#endif
+ void encodeCharsetName1() {
+ const logchar utf8[] = { 0x75, 0x74, 0x66, 0x2D, 0x38, 0x00 };
+ std::string encoded(Transcoder::encodeCharsetName(LogString(utf8)));
+ LOGUNIT_ASSERT_EQUAL(std::string("utf-8"), encoded);
+ }
+
+ void encodeCharsetName2() {
+ logchar lascii[0x60];
+ char ascii[0x60];
+ for(int i = 0; i < 0x5F; i++) {
+ lascii[i] = i + 0x20;
+ ascii[i] = i + 0x20;
+ }
+ lascii[0x5F] = 0;
+ ascii[0x5F] = 0;
+ std::string encoded(Transcoder::encodeCharsetName(LogString(ascii)));
+ LOGUNIT_ASSERT_EQUAL(std::string(" !\"#$%&'()*+,-./"), encoded.substr(0, 0x10));
+ if (0x40 == 'A') {
+ LOGUNIT_ASSERT_EQUAL(std::string(ascii), encoded);
+ }
+ }
+
+ void encodeCharsetName3() {
+ logchar unsupported[] = { 0x1F, 0x7F, 0x80, 0x81, 0x00 };
+ std::string encoded(Transcoder::encodeCharsetName(LogString(unsupported)));
+ LOGUNIT_ASSERT_EQUAL(std::string("????"), encoded);
+ }
+
};
LOGUNIT_TEST_SUITE_REGISTRATION(TranscoderTestCase);