Index: src/libchcore/TString.cpp =================================================================== diff -u -N -r8f43f71595b37201dd3aad1ca0c0e7690d10279e -ref57f6e998de7ed89a492d664c2c2656e357bf9f --- src/libchcore/TString.cpp (.../TString.cpp) (revision 8f43f71595b37201dd3aad1ca0c0e7690d10279e) +++ src/libchcore/TString.cpp (.../TString.cpp) (revision ef57f6e998de7ed89a492d664c2c2656e357bf9f) @@ -628,20 +628,21 @@ return npos; } -size_t TString::Find(const wchar_t* pszText, size_t stStartPos) +size_t TString::Find(const wchar_t* pszFindText, size_t stStartPos) { - if(!pszText) + if(!pszFindText) THROW_CORE_EXCEPTION(eErr_InvalidArgument); - size_t stTextLen = _tcslen(pszText); - if(stStartPos > stTextLen) + size_t stFindTextLen = _tcslen(pszFindText); + size_t stThisLen = GetLength(); + if(stStartPos > stThisLen - stFindTextLen) return std::numeric_limits::max(); - boost::iterator_range rangeText = boost::make_iterator_range(m_pszStringData + stStartPos, m_pszStringData + GetLength()); - boost::iterator_range rangeFind = boost::find_first(rangeText, pszText); + boost::iterator_range rangeText = boost::make_iterator_range(m_pszStringData + stStartPos, m_pszStringData + stThisLen); + boost::iterator_range rangeFind = boost::find_first(rangeText, pszFindText); if(rangeFind.begin() != rangeText.end()) - return rangeFind.begin() - rangeText.begin(); + return rangeFind.begin() - rangeText.begin() + stStartPos; else return std::numeric_limits::max(); } @@ -684,7 +685,7 @@ // found string pos is: [stFindPos, stFindPos + stWhatLen) -- sample ref: [3, 3 + 2) // we need to // - move string from position [stFindPos + stWhatLen, stCurrentLength) to position [stFindPos + stWithWhatLen, stCurrentLength + stWithWhatLen - stWhatLen] -- sample ref: [3+2, 6) to [3+1, 5) - size_t stCountToCopy = stCurrentLength - stFindPos - stWhatLen; + size_t stCountToCopy = stCurrentLength - stFindPos - stWhatLen + 1; memmove_s((void*)(m_pszStringData + stFindPos + stWithWhatLen), stCountToCopy * sizeof(wchar_t), (void*)(m_pszStringData + stFindPos + stWhatLen), stCountToCopy * sizeof(wchar_t));