Pass span<> to CPDFSDK_FormFillEnvironment::JS_docmailForm().
Do the same for JS_appResponse(). Then do a checked_cast<> right at
the API boundaries that needs an int.
Change-Id: I7971ae6d814b859c68a6a2751dd268d8d7ee3932
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/87052
Commit-Queue: Tom Sepez <tsepez@chromium.org>
Reviewed-by: Lei Zhang <thestig@chromium.org>
diff --git a/fpdfsdk/cpdfsdk_formfillenvironment.cpp b/fpdfsdk/cpdfsdk_formfillenvironment.cpp
index e52b96f..75abdc5 100644
--- a/fpdfsdk/cpdfsdk_formfillenvironment.cpp
+++ b/fpdfsdk/cpdfsdk_formfillenvironment.cpp
@@ -27,6 +27,7 @@
#include "fpdfsdk/formfiller/cffl_perwindowdata.h"
#include "fxjs/ijs_runtime.h"
#include "third_party/base/check.h"
+#include "third_party/base/numerics/safe_conversions.h"
static_assert(FXCT_ARROW ==
static_cast<int>(IPWL_SystemHandler::CursorStyle::kArrow),
@@ -210,13 +211,13 @@
AsFPDFWideString(&bsTitle), Type, Icon);
}
-int CPDFSDK_FormFillEnvironment::JS_appResponse(const WideString& Question,
- const WideString& Title,
- const WideString& Default,
- const WideString& Label,
- FPDF_BOOL bPassword,
- void* response,
- int length) {
+int CPDFSDK_FormFillEnvironment::JS_appResponse(
+ const WideString& Question,
+ const WideString& Title,
+ const WideString& Default,
+ const WideString& Label,
+ FPDF_BOOL bPassword,
+ pdfium::span<uint8_t> response) {
IPDF_JSPLATFORM* js_platform = GetJSPlatform();
if (!js_platform || !js_platform->app_response)
return -1;
@@ -228,7 +229,7 @@
return js_platform->app_response(
js_platform, AsFPDFWideString(&bsQuestion), AsFPDFWideString(&bsTitle),
AsFPDFWideString(&bsDefault), AsFPDFWideString(&bsLabel), bPassword,
- response, length);
+ response.data(), pdfium::base::checked_cast<int>(response.size()));
}
void CPDFSDK_FormFillEnvironment::JS_appBeep(int nType) {
@@ -259,8 +260,7 @@
return WideString::FromDefANSI(ByteStringView(pBuff));
}
-void CPDFSDK_FormFillEnvironment::JS_docmailForm(void* mailData,
- int length,
+void CPDFSDK_FormFillEnvironment::JS_docmailForm(pdfium::span<uint8_t> mailData,
FPDF_BOOL bUI,
const WideString& To,
const WideString& Subject,
@@ -276,7 +276,8 @@
ByteString bsCC = CC.ToUTF16LE();
ByteString bsBcc = BCC.ToUTF16LE();
ByteString bsMsg = Msg.ToUTF16LE();
- js_platform->Doc_mail(js_platform, mailData, length, bUI,
+ js_platform->Doc_mail(js_platform, mailData.data(),
+ pdfium::base::checked_cast<int>(mailData.size()), bUI,
AsFPDFWideString(&bsTo), AsFPDFWideString(&bsSubject),
AsFPDFWideString(&bsCC), AsFPDFWideString(&bsBcc),
AsFPDFWideString(&bsMsg));
diff --git a/fpdfsdk/cpdfsdk_formfillenvironment.h b/fpdfsdk/cpdfsdk_formfillenvironment.h
index 9fb5851..193edbf 100644
--- a/fpdfsdk/cpdfsdk_formfillenvironment.h
+++ b/fpdfsdk/cpdfsdk_formfillenvironment.h
@@ -7,6 +7,8 @@
#ifndef FPDFSDK_CPDFSDK_FORMFILLENVIRONMENT_H_
#define FPDFSDK_CPDFSDK_FORMFILLENVIRONMENT_H_
+#include <stdint.h>
+
#include <map>
#include <memory>
#include <vector>
@@ -24,6 +26,7 @@
#include "fpdfsdk/pwl/cpwl_wnd.h"
#include "fpdfsdk/pwl/ipwl_systemhandler.h"
#include "public/fpdf_formfill.h"
+#include "third_party/base/span.h"
class CPDFSDK_ActionHandler;
class CPDFSDK_AnnotHandlerMgr;
@@ -133,12 +136,10 @@
const WideString& Default,
const WideString& cLabel,
FPDF_BOOL bPassword,
- void* response,
- int length);
+ pdfium::span<uint8_t> response);
void JS_appBeep(int nType);
WideString JS_fieldBrowse();
- void JS_docmailForm(void* mailData,
- int length,
+ void JS_docmailForm(pdfium::span<uint8_t> mailData,
FPDF_BOOL bUI,
const WideString& To,
const WideString& Subject,
diff --git a/fpdfsdk/fpdfxfa/cpdfxfa_context.cpp b/fpdfsdk/fpdfxfa/cpdfxfa_context.cpp
index 35d33db..c0f2917 100644
--- a/fpdfsdk/fpdfxfa/cpdfxfa_context.cpp
+++ b/fpdfsdk/fpdfxfa/cpdfxfa_context.cpp
@@ -345,8 +345,7 @@
int nLength = 2048;
std::vector<uint8_t, FxAllocAllocator<uint8_t>> pBuff(nLength);
nLength = m_pFormFillEnv->JS_appResponse(wsQuestion, wsTitle, wsDefaultAnswer,
- WideString(), bMark, pBuff.data(),
- nLength);
+ WideString(), bMark, pBuff);
if (nLength <= 0)
return WideString();
diff --git a/fxjs/cjs_app.cpp b/fxjs/cjs_app.cpp
index b3f2de2..3a45683 100644
--- a/fxjs/cjs_app.cpp
+++ b/fxjs/cjs_app.cpp
@@ -458,8 +458,8 @@
cMsg = pRuntime->ToWideString(newParams[5]);
pRuntime->BeginBlock();
- pRuntime->GetFormFillEnv()->JS_docmailForm(nullptr, 0, bUI, cTo, cSubject,
- cCc, cBcc, cMsg);
+ pRuntime->GetFormFillEnv()->JS_docmailForm(pdfium::span<uint8_t>(), bUI, cTo,
+ cSubject, cCc, cBcc, cMsg);
pRuntime->EndBlock();
return CJS_Result::Success();
}
@@ -549,8 +549,8 @@
const int MAX_INPUT_BYTES = 2048;
std::vector<uint8_t, FxAllocAllocator<uint8_t>> pBuff(MAX_INPUT_BYTES + 2);
int nLengthBytes = pRuntime->GetFormFillEnv()->JS_appResponse(
- swQuestion, swTitle, swDefault, swLabel, bPassword, pBuff.data(),
- MAX_INPUT_BYTES);
+ swQuestion, swTitle, swDefault, swLabel, bPassword,
+ pdfium::make_span(pBuff).first(MAX_INPUT_BYTES));
if (nLengthBytes < 0 || nLengthBytes > MAX_INPUT_BYTES)
return CJS_Result::Failure(JSMessage::kParamTooLongError);
diff --git a/fxjs/cjs_document.cpp b/fxjs/cjs_document.cpp
index 983116c..61fe0e1 100644
--- a/fxjs/cjs_document.cpp
+++ b/fxjs/cjs_document.cpp
@@ -345,8 +345,8 @@
cMsg = pRuntime->ToWideString(newParams[5]);
pRuntime->BeginBlock();
- m_pFormFillEnv->JS_docmailForm(nullptr, 0, bUI, cTo, cSubject, cCc, cBcc,
- cMsg);
+ m_pFormFillEnv->JS_docmailForm(pdfium::span<uint8_t>(), bUI, cTo, cSubject,
+ cCc, cBcc, cMsg);
pRuntime->EndBlock();
return CJS_Result::Success();
}
@@ -396,11 +396,11 @@
if (IsExpandedParamKnown(newParams[5]))
cMsg = pRuntime->ToWideString(newParams[5]);
- std::vector<char, FxAllocAllocator<char>> mutable_buf(sTextBuf.begin(),
- sTextBuf.end());
+ std::vector<uint8_t, FxAllocAllocator<uint8_t>> mutable_buf(sTextBuf.begin(),
+ sTextBuf.end());
pRuntime->BeginBlock();
- m_pFormFillEnv->JS_docmailForm(mutable_buf.data(), mutable_buf.size(), bUI,
- cTo, cSubject, cCc, cBcc, cMsg);
+ m_pFormFillEnv->JS_docmailForm(mutable_buf, bUI, cTo, cSubject, cCc, cBcc,
+ cMsg);
pRuntime->EndBlock();
return CJS_Result::Success();
}