From 625fd5f1568be00da72c0a8b60ef1aabac485e1c Mon Sep 17 00:00:00 2001 From: Vincent Richard Date: Mon, 1 Feb 2010 13:06:06 +0000 Subject: [PATCH] Fixed bug #2927077: account for multi-byte charsets in invalid sequence output. --- src/charsetConverter.cpp | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/charsetConverter.cpp b/src/charsetConverter.cpp index ec74ae52..798adf07 100644 --- a/src/charsetConverter.cpp +++ b/src/charsetConverter.cpp @@ -121,7 +121,18 @@ void charsetConverter::convert(utility::inputStream& in, utility::outputStream& // Output a special character to indicate we don't known how to // convert the sequence at this position - out.write("?", 1); + const char* invalidCharIn = "?"; + size_t invalidCharInLen = 1; + + char invalidCharOutBuffer[16]; + char* invalidCharOutPtr = invalidCharOutBuffer; + size_t invalidCharOutLen = 16; + + if (iconv(cd, ICONV_HACK(&invalidCharIn), &invalidCharInLen, + &invalidCharOutPtr, &invalidCharOutLen) != static_cast (-1)) + { + out.write(invalidCharOutBuffer, 16 - invalidCharOutLen); + } // Skip a byte and leave unconverted bytes in the input buffer std::copy(const_cast (inPtr + 1), inBuffer + sizeof(inBuffer), inBuffer);