summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Sinclair <dsinclair@chromium.org>2018-06-14 19:55:22 +0000
committerChromium commit bot <commit-bot@chromium.org>2018-06-14 19:55:22 +0000
commite90469e4c9b22ff912c70ec70392cf607fb1ad57 (patch)
tree87af6b4e4bedb0ee86ada4bb21f2466a02e50f43
parentbb3d6313f278feee76f5fba17feff3aee65fb928 (diff)
downloadpdfium-e90469e4c9b22ff912c70ec70392cf607fb1ad57.tar.xz
[formcalc] Calculate length of string when calling FXSYS_wcstof
When calling the FXSYS_wctof method we currently pass in -1 from AdvanceForNumber. This tells the method to calculate the string length. This can be slow for a formcalc string with a lot of numbers. This CL changes the call to pass in the length of remaining data in the original string. This takes the MSAN runtime of the case in the linked bug from ~21seconds to ~500ms. The debug runtime goes from ~2s to ~500ms. Bug: chromium:846104 Change-Id: Idbd19a728160f35982e21c0d97567fbbeefe667a Reviewed-on: https://pdfium-review.googlesource.com/35210 Reviewed-by: Tom Sepez <tsepez@chromium.org> Commit-Queue: dsinclair <dsinclair@chromium.org>
-rw-r--r--xfa/fxfa/fm2js/cxfa_fmlexer.cpp6
1 files changed, 4 insertions, 2 deletions
diff --git a/xfa/fxfa/fm2js/cxfa_fmlexer.cpp b/xfa/fxfa/fm2js/cxfa_fmlexer.cpp
index 3a694675b7..f9771940b6 100644
--- a/xfa/fxfa/fm2js/cxfa_fmlexer.cpp
+++ b/xfa/fxfa/fm2js/cxfa_fmlexer.cpp
@@ -304,8 +304,10 @@ CXFA_FMToken CXFA_FMLexer::NextToken() {
CXFA_FMToken CXFA_FMLexer::AdvanceForNumber() {
// This will set end to the character after the end of the number.
int32_t used_length = 0;
- if (m_cursor)
- FXSYS_wcstof(const_cast<wchar_t*>(m_cursor), -1, &used_length);
+ if (m_cursor) {
+ FXSYS_wcstof(const_cast<wchar_t*>(m_cursor), m_end - m_cursor,
+ &used_length);
+ }
const wchar_t* end = m_cursor + used_length;
if (used_length == 0 || !end || FXSYS_iswalpha(*end)) {