Avoid a copy in CJS_Document::mailForm().
Since the copied data ultimately goes out to Doc_mail() as a void*, it
is not intended to be modified. Thus CJS_Document::mailForm() does not
need to make a copy, and can just pass in the original data.
Change-Id: I073308ac785b737284226e94f45c50fcd819dd3a
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/96610
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/fpdfsdk/cpdfsdk_formfillenvironment.cpp b/fpdfsdk/cpdfsdk_formfillenvironment.cpp
index b379644..c1102e4 100644
--- a/fpdfsdk/cpdfsdk_formfillenvironment.cpp
+++ b/fpdfsdk/cpdfsdk_formfillenvironment.cpp
@@ -248,13 +248,14 @@
return WideString::FromDefANSI(ByteStringView(pBuff));
}
-void CPDFSDK_FormFillEnvironment::JS_docmailForm(pdfium::span<uint8_t> mailData,
- FPDF_BOOL bUI,
- const WideString& To,
- const WideString& Subject,
- const WideString& CC,
- const WideString& BCC,
- const WideString& Msg) {
+void CPDFSDK_FormFillEnvironment::JS_docmailForm(
+ pdfium::span<const uint8_t> mailData,
+ FPDF_BOOL bUI,
+ const WideString& To,
+ const WideString& Subject,
+ const WideString& CC,
+ const WideString& BCC,
+ const WideString& Msg) {
IPDF_JSPLATFORM* js_platform = GetJSPlatform();
if (!js_platform || !js_platform->Doc_mail)
return;
@@ -264,7 +265,7 @@
ByteString bsCC = CC.ToUTF16LE();
ByteString bsBcc = BCC.ToUTF16LE();
ByteString bsMsg = Msg.ToUTF16LE();
- js_platform->Doc_mail(js_platform, mailData.data(),
+ js_platform->Doc_mail(js_platform, const_cast<uint8_t*>(mailData.data()),
pdfium::base::checked_cast<int>(mailData.size()), bUI,
AsFPDFWideString(&bsTo), AsFPDFWideString(&bsSubject),
AsFPDFWideString(&bsCC), AsFPDFWideString(&bsBcc),
diff --git a/fpdfsdk/cpdfsdk_formfillenvironment.h b/fpdfsdk/cpdfsdk_formfillenvironment.h
index 5ec9acb..2f6d274 100644
--- a/fpdfsdk/cpdfsdk_formfillenvironment.h
+++ b/fpdfsdk/cpdfsdk_formfillenvironment.h
@@ -163,7 +163,7 @@
pdfium::span<uint8_t> response);
void JS_appBeep(int nType);
WideString JS_fieldBrowse();
- void JS_docmailForm(pdfium::span<uint8_t> mailData,
+ void JS_docmailForm(pdfium::span<const uint8_t> mailData,
FPDF_BOOL bUI,
const WideString& To,
const WideString& Subject,
diff --git a/fxjs/cjs_app.cpp b/fxjs/cjs_app.cpp
index e8cbc1f..e7787c7 100644
--- a/fxjs/cjs_app.cpp
+++ b/fxjs/cjs_app.cpp
@@ -461,8 +461,8 @@
cMsg = pRuntime->ToWideString(newParams[5]);
pRuntime->BeginBlock();
- pRuntime->GetFormFillEnv()->JS_docmailForm(pdfium::span<uint8_t>(), bUI, cTo,
- cSubject, cCc, cBcc, cMsg);
+ pRuntime->GetFormFillEnv()->JS_docmailForm(pdfium::span<const uint8_t>(), bUI,
+ cTo, cSubject, cCc, cBcc, cMsg);
pRuntime->EndBlock();
return CJS_Result::Success();
}
diff --git a/fxjs/cjs_document.cpp b/fxjs/cjs_document.cpp
index 6d9b0d8..a3a9d7d 100644
--- a/fxjs/cjs_document.cpp
+++ b/fxjs/cjs_document.cpp
@@ -20,7 +20,6 @@
#include "core/fpdfapi/render/cpdf_pagerendercache.h"
#include "core/fpdfdoc/cpdf_interactiveform.h"
#include "core/fpdfdoc/cpdf_nametree.h"
-#include "core/fxcrt/data_vector.h"
#include "fpdfsdk/cpdfsdk_annotiteration.h"
#include "fpdfsdk/cpdfsdk_formfillenvironment.h"
#include "fpdfsdk/cpdfsdk_interactiveform.h"
@@ -347,8 +346,8 @@
cMsg = pRuntime->ToWideString(newParams[5]);
pRuntime->BeginBlock();
- m_pFormFillEnv->JS_docmailForm(pdfium::span<uint8_t>(), bUI, cTo, cSubject,
- cCc, cBcc, cMsg);
+ m_pFormFillEnv->JS_docmailForm(pdfium::span<const uint8_t>(), bUI, cTo,
+ cSubject, cCc, cBcc, cMsg);
pRuntime->EndBlock();
return CJS_Result::Success();
}
@@ -398,10 +397,9 @@
if (IsExpandedParamKnown(newParams[5]))
cMsg = pRuntime->ToWideString(newParams[5]);
- DataVector<uint8_t> mutable_buf(sTextBuf.begin(), sTextBuf.end());
pRuntime->BeginBlock();
- m_pFormFillEnv->JS_docmailForm(mutable_buf, bUI, cTo, cSubject, cCc, cBcc,
- cMsg);
+ m_pFormFillEnv->JS_docmailForm(sTextBuf.raw_span(), bUI, cTo, cSubject, cCc,
+ cBcc, cMsg);
pRuntime->EndBlock();
return CJS_Result::Success();
}