[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 <dsinclair@chromium.org>
Reviewed-by: Ryan Harrison <rharrison@chromium.org>
(cherry picked from commit 9141116074f9209f617d9607e747c8947c952c46)
Reviewed-on: https://pdfium-review.googlesource.com/27750
Reviewed-by: dsinclair <dsinclair@chromium.org>
diff --git a/fxjs/cjs_publicmethods.cpp b/fxjs/cjs_publicmethods.cpp
index 45eae7f..65edd2e 100644
--- a/fxjs/cjs_publicmethods.cpp
+++ b/fxjs/cjs_publicmethods.cpp
@@ -1586,7 +1586,7 @@
   double dValue = wcscmp(sFunction.c_str(), L"PRD") == 0 ? 1.0 : 0.0;
 
   v8::Local<v8::Array> 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 dbab081..874f59f 100644
--- a/fxjs/cjs_publicmethods_embeddertest.cpp
+++ b/fxjs/cjs_publicmethods_embeddertest.cpp
@@ -3,8 +3,10 @@
 // found in the LICENSE file.
 
 #include <cmath>
+#include <vector>
 
 #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 @@
       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<CPDFSDK_FormFillEnvironment*>(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<v8::Local<v8::Value>> 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 0000000..3e40bf8
--- /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 0000000..8b2b944
--- /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