Correctly account for Arabic characters in CFX_RTFBreak.
https://pdfium-review.googlesource.com/59794 added a sanity check to
make sure the Arabic characters count in CFX_BreakLine never goes
negative. Soon, pdf_bidi_fuzzer found out it can. This is because
https://pdfium-review.googlesource.com/32714 made it possible for
CFX_RTFBreak::AppendChar_Arabic() to return early and forget to
increment the count.
Fix this by always incrementing the count in AppendChar_Arabic().
Bug: chromium:996279
Change-Id: Id0de02e81fbb09dd8a5475212419c38310ec12db
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/59850
Reviewed-by: Henrique Nakashima <hnakashima@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/xfa/fgas/layout/cfx_rtfbreak.cpp b/xfa/fgas/layout/cfx_rtfbreak.cpp
index 40f5b84..2a09810 100644
--- a/xfa/fgas/layout/cfx_rtfbreak.cpp
+++ b/xfa/fgas/layout/cfx_rtfbreak.cpp
@@ -199,6 +199,8 @@
}
CFX_BreakType CFX_RTFBreak::AppendChar_Arabic(CFX_Char* pCurChar) {
+ m_pCurLine->IncrementArabicCharCount();
+
CFX_Char* pLastChar = nullptr;
wchar_t wForm;
bool bAlef = false;
@@ -264,7 +266,6 @@
return CFX_BreakType::None;
m_pCurLine->m_iWidth = checked_width.ValueOrDie();
- m_pCurLine->IncrementArabicCharCount();
if (IsGreaterThanLineWidth(m_pCurLine->GetLineEnd()))
return EndBreak(CFX_BreakType::Line);