diff options
Diffstat (limited to 'core/fxcrt/fx_basic_bstring.cpp')
-rw-r--r-- | core/fxcrt/fx_basic_bstring.cpp | 25 |
1 files changed, 9 insertions, 16 deletions
diff --git a/core/fxcrt/fx_basic_bstring.cpp b/core/fxcrt/fx_basic_bstring.cpp index ab9299694e..10bc05bcc5 100644 --- a/core/fxcrt/fx_basic_bstring.cpp +++ b/core/fxcrt/fx_basic_bstring.cpp @@ -420,27 +420,20 @@ void CFX_ByteString::ConcatCopy(FX_STRSIZE nSrc1Len, pOldData->Release(); } CFX_ByteString CFX_ByteString::Mid(FX_STRSIZE nFirst) const { - if (!m_pData) { + if (!m_pData) return CFX_ByteString(); - } + return Mid(nFirst, m_pData->m_nDataLength - nFirst); } CFX_ByteString CFX_ByteString::Mid(FX_STRSIZE nFirst, FX_STRSIZE nCount) const { - 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) { + if (!m_pData) + return CFX_ByteString(); + + nFirst = std::min(std::max(0, nFirst), m_pData->m_nDataLength); + nCount = std::min(std::max(0, nCount), m_pData->m_nDataLength - nFirst); + if (nFirst == 0 && nCount == m_pData->m_nDataLength) return *this; - } + CFX_ByteString dest; AllocCopy(dest, nCount, nFirst); return dest; |