X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/4cb0e8d05cadea6be3a7bd93f1fea9a9e0df95f0..08670ea85abf4b4946a9ce64971b591d7b1ee30b:/src/common/txtstrm.cpp?ds=sidebyside diff --git a/src/common/txtstrm.cpp b/src/common/txtstrm.cpp index 9f9669faa1..9408345960 100644 --- a/src/common/txtstrm.cpp +++ b/src/common/txtstrm.cpp @@ -75,11 +75,35 @@ wxChar wxTextInputStream::NextChar() if(m_input.LastRead() <= 0) return wxEOT; - if ( m_conv->ToWChar(wbuf, WXSIZEOF(wbuf), m_lastBytes, inlen + 1) - == 1 ) - return wbuf[0]; + switch ( m_conv->ToWChar(wbuf, WXSIZEOF(wbuf), m_lastBytes, inlen + 1) ) + { + case 0: + // this is a bug in converter object as it should either fail + // or decode non-empty string to something non-empty + wxFAIL_MSG("ToWChar() can't return 0 for non-empty input"); + break; + + case wxCONV_FAILED: + // the buffer probably doesn't contain enough bytes to decode + // as a complete character, try with more bytes + break; + + default: + // if we couldn't decode a single character during the last + // loop iteration we shouldn't be able to decode 2 or more of + // them with an extra single byte, something fishy is going on + wxFAIL_MSG("unexpected decoding result"); + // fall through nevertheless and return at least something + + case 1: + // we finally decoded a character + return wbuf[0]; + } } - // there should be no encoding which requires more than nine bytes for one character... + + // there should be no encoding which requires more than nine bytes for one + // character so something must be wrong with our conversion but we have no + // way to signal it from here return wxEOT; #else m_lastBytes[0] = m_input.GetC();