summaryrefslogtreecommitdiff
path: root/fpdfsdk/javascript/util.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'fpdfsdk/javascript/util.cpp')
-rw-r--r--fpdfsdk/javascript/util.cpp21
1 files changed, 20 insertions, 1 deletions
diff --git a/fpdfsdk/javascript/util.cpp b/fpdfsdk/javascript/util.cpp
index 100a5caab4..3338a3a126 100644
--- a/fpdfsdk/javascript/util.cpp
+++ b/fpdfsdk/javascript/util.cpp
@@ -150,9 +150,28 @@ bool util::printf(CJS_Runtime* pRuntime,
CFX_WideString strSegment;
switch (ParseDataType(&c_strFormat)) {
- case UTIL_INT:
+ case UTIL_INT: {
+ int dot = c_strFormat.find(L".", 0);
+ if (dot != -1) {
+ size_t len = 0;
+ for (size_t i = dot + 1; i < c_strFormat.length(); ++i) {
+ wchar_t c = c_strFormat[i];
+ if (std::iswdigit(c)) {
+ ++len;
+ continue;
+ }
+ break;
+ }
+
+ // Windows has a max of ~261 characters in the format string of
+ // the form %0.261x. We're just going to bail out if the format
+ // would be over 3 or more characters long.
+ if (len > 2)
+ return false;
+ }
strSegment.Format(c_strFormat.c_str(), params[iIndex].ToInt(pRuntime));
break;
+ }
case UTIL_DOUBLE:
strSegment.Format(c_strFormat.c_str(),
params[iIndex].ToDouble(pRuntime));