diff options
author | Ryan Harrison <rharrison@chromium.org> | 2017-09-13 11:16:32 -0400 |
---|---|---|
committer | Chromium commit bot <commit-bot@chromium.org> | 2017-09-13 15:42:13 +0000 |
commit | 06c6855258bf25246c46a1f628b8a8a8185029a7 (patch) | |
tree | 7db9bd2cae8672a06834105542cef5c70bc9db08 /core/fxcrt/cfx_string_c_template.h | |
parent | f2ca50ffa2d26a6c023add24e92adbe6b28bfcc9 (diff) | |
download | pdfium-06c6855258bf25246c46a1f628b8a8a8185029a7.tar.xz |
Rewrite IsHyphen using string operations
The existing code did end of range checks by making sure that the
value was never less then 0. This isn't correct when using an unsigned
type, since 0 - 1 will wrap around to the max possible value, and
thus still be less then 0. Additionally the existing code was hard to
follow due to the complexity of some of the low level operations being
performed.
It has been rewritten using higher level string operations to make it
clearer and correct.
BUG=chromium:763256
Change-Id: Ib8bf5ca0e29e73724c4a1c4781362e8a8fc30149
Reviewed-on: https://pdfium-review.googlesource.com/13690
Commit-Queue: Ryan Harrison <rharrison@chromium.org>
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Diffstat (limited to 'core/fxcrt/cfx_string_c_template.h')
-rw-r--r-- | core/fxcrt/cfx_string_c_template.h | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/core/fxcrt/cfx_string_c_template.h b/core/fxcrt/cfx_string_c_template.h index 8585d73ae6..b0e17a1222 100644 --- a/core/fxcrt/cfx_string_c_template.h +++ b/core/fxcrt/cfx_string_c_template.h @@ -176,6 +176,20 @@ class CFX_StringCTemplate { return Mid(GetLength() - count, count); } + CFX_StringCTemplate TrimmedRight(CharType ch) const { + if (IsEmpty()) + return CFX_StringCTemplate(); + + FX_STRSIZE pos = GetLength(); + while (pos && CharAt(pos - 1) == ch) + pos--; + + if (pos == 0) + return CFX_StringCTemplate(); + + return CFX_StringCTemplate(m_Ptr.Get(), pos); + } + bool operator<(const CFX_StringCTemplate& that) const { int result = FXSYS_cmp(reinterpret_cast<const CharType*>(m_Ptr.Get()), reinterpret_cast<const CharType*>(that.m_Ptr.Get()), |