| Index: core/fxcrt/fx_basic_wstring.cpp
|
| diff --git a/core/fxcrt/fx_basic_wstring.cpp b/core/fxcrt/fx_basic_wstring.cpp
|
| index aa62b5e3560195b005774243b5290439f56a63ab..642b75eafe35304badc2102201a184dd2576daa6 100644
|
| --- a/core/fxcrt/fx_basic_wstring.cpp
|
| +++ b/core/fxcrt/fx_basic_wstring.cpp
|
| @@ -441,27 +441,20 @@ CFX_WideString CFX_WideString::Left(FX_STRSIZE nCount) const {
|
| return dest;
|
| }
|
| CFX_WideString CFX_WideString::Mid(FX_STRSIZE nFirst) const {
|
| + if (!m_pData)
|
| + return CFX_WideString();
|
| +
|
| return Mid(nFirst, m_pData->m_nDataLength - nFirst);
|
| }
|
| CFX_WideString CFX_WideString::Mid(FX_STRSIZE nFirst, FX_STRSIZE nCount) const {
|
| - if (!m_pData) {
|
| + if (!m_pData)
|
| return CFX_WideString();
|
| - }
|
| - if (nFirst < 0) {
|
| - nFirst = 0;
|
| - }
|
| - if (nCount < 0) {
|
| - nCount = 0;
|
| - }
|
| - if (nFirst + nCount > m_pData->m_nDataLength) {
|
| - nCount = m_pData->m_nDataLength - nFirst;
|
| - }
|
| - if (nFirst > m_pData->m_nDataLength) {
|
| - nCount = 0;
|
| - }
|
| - if (nFirst == 0 && nFirst + nCount == m_pData->m_nDataLength) {
|
| +
|
| + nFirst = std::min(std::max(nFirst, 0), m_pData->m_nDataLength);
|
| + nCount = std::min(std::max(nCount, 0), m_pData->m_nDataLength - nFirst);
|
| + if (nFirst == 0 && nCount == m_pData->m_nDataLength)
|
| return *this;
|
| - }
|
| +
|
| CFX_WideString dest;
|
| AllocCopy(dest, nCount, nFirst);
|
| return dest;
|
|
|