From: Vadim Zeitlin Date: Fri, 16 Jan 2009 13:24:25 +0000 (+0000) Subject: don't use wxString::FromASCII() with possibly non-ASCII strings (fixes asserts when... X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/23fb33aa4e15110d41b5a16fff438e44e0cb3ea9 don't use wxString::FromASCII() with possibly non-ASCII strings (fixes asserts when testing Japanese locale in the internat sample) git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@58128 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/src/common/intl.cpp b/src/common/intl.cpp index e242998a14..e7ca00816f 100644 --- a/src/common/intl.cpp +++ b/src/common/intl.cpp @@ -1307,52 +1307,56 @@ bool wxMsgCatalogFile::Load(const wxString& szDirPrefix, const wxString& szName, // plural forms formula from it: const char* headerData = StringAtOfs(m_pOrigTable, 0); - if (headerData && headerData[0] == 0) + if ( headerData && headerData[0] == '\0' ) { // Extract the charset: - wxString header = wxString::FromAscii(StringAtOfs(m_pTransTable, 0)); - int begin = header.Find(wxS("Content-Type: text/plain; charset=")); - if (begin != wxNOT_FOUND) + const char * const header = StringAtOfs(m_pTransTable, 0); + const char * + cset = strstr(header, "Content-Type: text/plain; charset="); + if ( cset ) { - begin += 34; //strlen("Content-Type: text/plain; charset=") - size_t end = header.find('\n', begin); - if (end != size_t(-1)) + cset += 34; // strlen("Content-Type: text/plain; charset=") + + const char * const csetEnd = strchr(cset, '\n'); + if ( csetEnd ) { - m_charset.assign(header, begin, end - begin); - if (m_charset == wxS("CHARSET")) + m_charset = wxString(cset, csetEnd - cset); + if ( m_charset == wxS("CHARSET") ) { // "CHARSET" is not valid charset, but lazy translator - m_charset.Clear(); + m_charset.empty(); } } } // else: incorrectly filled Content-Type header // Extract plural forms: - begin = header.Find(wxS("Plural-Forms:")); - if (begin != wxNOT_FOUND) + const char * plurals = strstr(header, "Plural-Forms:"); + if ( plurals ) { - begin += 13; - size_t end = header.find('\n', begin); - if (end != size_t(-1)) + plurals += 13; // strlen("Plural-Forms:") + const char * const pluralsEnd = strchr(plurals, '\n'); + if ( pluralsEnd ) { - wxString pfs(header, begin, end - begin); - wxPluralFormsCalculator* pCalculator = wxPluralFormsCalculator - ::make(pfs.ToAscii()); - if (pCalculator != 0) + const size_t pluralsLen = pluralsEnd - plurals; + wxCharBuffer buf(pluralsLen); + strncpy(buf.data(), plurals, pluralsLen); + wxPluralFormsCalculator * const + pCalculator = wxPluralFormsCalculator::make(buf); + if ( pCalculator ) { rPluralFormsCalculator.reset(pCalculator); } else { - wxLogVerbose(_("Cannot parse Plural-Forms:'%s'"), pfs.c_str()); + wxLogVerbose(_("Failed to parse Plural-Forms: '%s'"), + buf.data()); } } } - if (rPluralFormsCalculator.get() == NULL) - { + + if ( !rPluralFormsCalculator.get() ) rPluralFormsCalculator.reset(wxPluralFormsCalculator::make()); - } } // everything is fine