Index: src/libchcore/TString.cpp =================================================================== diff -u -N -r14d99757fbeaa3e55d43b45b043033d8ba81980b -rb1e03eb232a784d6e2d40f67cbbbb33be0972228 --- src/libchcore/TString.cpp (.../TString.cpp) (revision 14d99757fbeaa3e55d43b45b043033d8ba81980b) +++ src/libchcore/TString.cpp (.../TString.cpp) (revision b1e03eb232a784d6e2d40f67cbbbb33be0972228) @@ -79,7 +79,7 @@ wchar_t* pszNewBuffer = new wchar_t[stNewLen]; if(m_pszData) - memcpy(pszNewBuffer, m_pszData, m_stStringLength); + _tcsncpy_s(pszNewBuffer, stNewLen, m_pszData, m_stStringLength + 1); else pszNewBuffer[0] = _T('\0'); @@ -204,7 +204,8 @@ { if(this != &rSrc && m_pData != rSrc.m_pData) { - Release(); + if(InterlockedDecrement(&m_pData->m_lRefCount) < 1) + delete m_pData; if(InterlockedCompareExchange(&rSrc.m_pData->m_lRefCount, 0, 0) > 0) {