From e839a6adb305467759e0d22fe7532a72fe4d8fa7 Mon Sep 17 00:00:00 2001 From: Dan Sinclair Date: Tue, 27 Feb 2018 15:46:52 +0000 Subject: [Merge M65] Fixup AFSimple_Calculate indexing bug The refactoring in [1] introduced a bug where we pulled the wrong array index to get the array of fields to use in the AFSimple_Calculate method. This caused the calculation to not be performed as the fields could not be found. This CL fixes up the index and adds a test to verify we use AFSimple_Calucate to sum two fields. 1- https://pdfium-review.googlesource.com/c/pdfium/+/16670 TBR: rharrision@chromium.org Bug: chromium:811913 Change-Id: I2abb9fe4fe2d6969ce1876736faadf252ef90575 Reviewed-on: https://pdfium-review.googlesource.com/27670 Commit-Queue: dsinclair Reviewed-by: Ryan Harrison (cherry picked from commit 9141116074f9209f617d9607e747c8947c952c46) Reviewed-on: https://pdfium-review.googlesource.com/27750 Reviewed-by: dsinclair --- fxjs/cjs_publicmethods.cpp | 2 +- fxjs/cjs_publicmethods_embeddertest.cpp | 36 +++++++++ testing/resources/calculate.in | 62 ++++++++++++++++ testing/resources/calculate.pdf | 127 ++++++++++++++++++++++++++++++++ 4 files changed, 226 insertions(+), 1 deletion(-) create mode 100644 testing/resources/calculate.in create mode 100644 testing/resources/calculate.pdf diff --git a/fxjs/cjs_publicmethods.cpp b/fxjs/cjs_publicmethods.cpp index 45eae7f8d2..65edd2e05b 100644 --- a/fxjs/cjs_publicmethods.cpp +++ b/fxjs/cjs_publicmethods.cpp @@ -1586,7 +1586,7 @@ CJS_Return CJS_PublicMethods::AFSimple_Calculate( double dValue = wcscmp(sFunction.c_str(), L"PRD") == 0 ? 1.0 : 0.0; v8::Local FieldNameArray = - AF_MakeArrayFromList(pRuntime, params[0]); + AF_MakeArrayFromList(pRuntime, params[1]); int nFieldsCount = 0; for (size_t i = 0; i < pRuntime->GetArrayLength(FieldNameArray); ++i) { WideString wsFieldName = diff --git a/fxjs/cjs_publicmethods_embeddertest.cpp b/fxjs/cjs_publicmethods_embeddertest.cpp index dbab0817ce..874f59f5ae 100644 --- a/fxjs/cjs_publicmethods_embeddertest.cpp +++ b/fxjs/cjs_publicmethods_embeddertest.cpp @@ -3,8 +3,10 @@ // found in the LICENSE file. #include +#include #include "core/fxcrt/fx_string.h" +#include "fxjs/cjs_event_context.h" #include "fxjs/cjs_publicmethods.h" #include "testing/gtest/include/gtest/gtest.h" #include "testing/js_embedder_test.h" @@ -160,3 +162,37 @@ TEST_F(CJS_PublicMethodsEmbedderTest, MakeFormatDate) { CJS_PublicMethods::MakeFormatDate(3947356800000.0, L"mmddyyyy"); EXPECT_STREQ(L"02012095", formatted_date.c_str()); } + +TEST_F(CJS_PublicMethodsEmbedderTest, AFSimple_CalculateSum) { + v8::Isolate::Scope isolate_scope(isolate()); + v8::HandleScope handle_scope(isolate()); + v8::Context::Scope context_scope(GetV8Context()); + + EXPECT_TRUE(OpenDocument("calculate.pdf")); + auto* page = LoadPage(0); + ASSERT_TRUE(page); + + CJS_Runtime runtime(static_cast(form_handle())); + runtime.NewEventContext(); + + WideString result; + runtime.GetCurrentEventContext()->GetEventHandler()->m_pValue = &result; + + auto ary = runtime.NewArray(); + + runtime.PutArrayElement(ary, 0, runtime.NewString(L"Calc1_A")); + runtime.PutArrayElement(ary, 1, runtime.NewString(L"Calc1_B")); + + std::vector> params; + params.push_back(runtime.NewString("SUM")); + params.push_back(ary); + + CJS_Return ret = CJS_PublicMethods::AFSimple_Calculate(&runtime, params); + UnloadPage(page); + + runtime.GetCurrentEventContext()->GetEventHandler()->m_pValue = nullptr; + + ASSERT_TRUE(!ret.HasError()); + ASSERT_TRUE(!ret.HasReturn()); + ASSERT_EQ(L"7", result); +} diff --git a/testing/resources/calculate.in b/testing/resources/calculate.in new file mode 100644 index 0000000000..3e40bf8ff5 --- /dev/null +++ b/testing/resources/calculate.in @@ -0,0 +1,62 @@ +{{header}} +{{object 1 0}} << + /AcroForm 11 0 R + /Pages 5 0 R + /Type /Catalog +>> +endobj + +{{object 11 0}} << + /Fields [57 0 R 61 0 R] +>> +endobj + +{{object 5 0}} << + /Count 1 + /Type /Pages + /Kids [12 0 R] +>> +endobj + +{{object 12 0}} << + /CropBox [0.0 0.0 720.0 540.0] + /Annots [57 0 R 61 0 R] + /Parent 5 0 R + /MediaBox[0.0 0.0 720.0 540.0] + /TrimBox[0.0 0.0 720.0 540.0] + /Type /Page +>> +endobj + +{{object 57 0}} << + /Rect [142.13 307.409 208.842 331.442] + /Subtype /Widget + /F 4 + /P 12 0 R + /Q 2 + /T (Calc1_A) + /V (5) + /DV (5) + /FT /Tx + /Type /Annot +>> +endobj + +{{object 61 0}} << + /Rect [290.306 307.409 357.793 331.442] + /Subtype /Widget + /F 4 + /P 12 0 R + /Q 2 + /T (Calc1_B) + /V (2) + /DV (2) + /FT /Tx + /Type /Annot +>> +endobj + +{{xref}} +{{trailer}} +{{startxref}} +%%EOF diff --git a/testing/resources/calculate.pdf b/testing/resources/calculate.pdf new file mode 100644 index 0000000000..8b2b9441d7 --- /dev/null +++ b/testing/resources/calculate.pdf @@ -0,0 +1,127 @@ +%PDF-1.7 +% ò¤ô +1 0 obj << + /AcroForm 11 0 R + /Pages 5 0 R + /Type /Catalog +>> +endobj + +11 0 obj << + /Fields [57 0 R 61 0 R] +>> +endobj + +5 0 obj << + /Count 1 + /Type /Pages + /Kids [12 0 R] +>> +endobj + +12 0 obj << + /CropBox [0.0 0.0 720.0 540.0] + /Annots [57 0 R 61 0 R] + /Parent 5 0 R + /MediaBox[0.0 0.0 720.0 540.0] + /TrimBox[0.0 0.0 720.0 540.0] + /Type /Page +>> +endobj + +57 0 obj << + /Rect [142.13 307.409 208.842 331.442] + /Subtype /Widget + /F 4 + /P 12 0 R + /Q 2 + /T (Calc1_A) + /V (5) + /DV (5) + /FT /Tx + /Type /Annot +>> +endobj + +61 0 obj << + /Rect [290.306 307.409 357.793 331.442] + /Subtype /Widget + /F 4 + /P 12 0 R + /Q 2 + /T (Calc1_B) + /V (2) + /DV (2) + /FT /Tx + /Type /Annot +>> +endobj + +xref +0 62 +0000000000 65535 f +0000000015 00000 n +0000000000 65535 f +0000000000 65535 f +0000000000 65535 f +0000000137 00000 n +0000000000 65535 f +0000000000 65535 f +0000000000 65535 f +0000000000 65535 f +0000000000 65535 f +0000000088 00000 n +0000000202 00000 n +0000000000 65535 f +0000000000 65535 f +0000000000 65535 f +0000000000 65535 f +0000000000 65535 f +0000000000 65535 f +0000000000 65535 f +0000000000 65535 f +0000000000 65535 f +0000000000 65535 f +0000000000 65535 f +0000000000 65535 f +0000000000 65535 f +0000000000 65535 f +0000000000 65535 f +0000000000 65535 f +0000000000 65535 f +0000000000 65535 f +0000000000 65535 f +0000000000 65535 f +0000000000 65535 f +0000000000 65535 f +0000000000 65535 f +0000000000 65535 f +0000000000 65535 f +0000000000 65535 f +0000000000 65535 f +0000000000 65535 f +0000000000 65535 f +0000000000 65535 f +0000000000 65535 f +0000000000 65535 f +0000000000 65535 f +0000000000 65535 f +0000000000 65535 f +0000000000 65535 f +0000000000 65535 f +0000000000 65535 f +0000000000 65535 f +0000000000 65535 f +0000000000 65535 f +0000000000 65535 f +0000000000 65535 f +0000000000 65535 f +0000000379 00000 n +0000000000 65535 f +0000000000 65535 f +0000000000 65535 f +0000000547 00000 n +trailer<< /Root 1 0 R /Size 62 >> +startxref +716 +%%EOF -- cgit v1.2.3