summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--xfa/fgas/layout/cfx_rtfbreak.cpp15
1 files changed, 11 insertions, 4 deletions
diff --git a/xfa/fgas/layout/cfx_rtfbreak.cpp b/xfa/fgas/layout/cfx_rtfbreak.cpp
index 700139160a..c478d98c72 100644
--- a/xfa/fgas/layout/cfx_rtfbreak.cpp
+++ b/xfa/fgas/layout/cfx_rtfbreak.cpp
@@ -153,10 +153,17 @@ void CFX_RTFBreak::AppendChar_Tab(CFX_Char* pCurChar) {
int32_t& iLineWidth = m_pCurLine->m_iWidth;
int32_t iCharWidth = iLineWidth;
- if (GetPositionedTab(&iCharWidth))
- iCharWidth -= iLineWidth;
- else
- iCharWidth = m_iTabWidth * (iLineWidth / m_iTabWidth + 1) - iLineWidth;
+ FX_SAFE_INT32 iSafeCharWidth;
+ if (GetPositionedTab(&iCharWidth)) {
+ iSafeCharWidth = iCharWidth;
+ } else {
+ // Tab width is >= 160000, so this part does not need to be checked.
+ iSafeCharWidth = iLineWidth / m_iTabWidth + 1;
+ iSafeCharWidth *= m_iTabWidth;
+ }
+ iSafeCharWidth -= iLineWidth;
+
+ iCharWidth = iSafeCharWidth.ValueOrDefault(0);
pCurChar->m_iCharWidth = iCharWidth;
iLineWidth += iCharWidth;