| Index: fpdfsdk/src/javascript/Field.cpp | 
| diff --git a/fpdfsdk/src/javascript/Field.cpp b/fpdfsdk/src/javascript/Field.cpp | 
| index d97001aae2690a10868002dbbcb145b9ef13140f..0b78ba24a616260bbc736c131d57d212a40864d1 100644 | 
| --- a/fpdfsdk/src/javascript/Field.cpp | 
| +++ b/fpdfsdk/src/javascript/Field.cpp | 
| @@ -6,6 +6,10 @@ | 
|  | 
| #include "Field.h" | 
|  | 
| +#include <algorithm> | 
| +#include <memory> | 
| +#include <vector> | 
| + | 
| #include "Document.h" | 
| #include "Icon.h" | 
| #include "JS_Context.h" | 
| @@ -3083,10 +3087,6 @@ FX_BOOL Field::deleteItemAt(IJS_Context* cc, | 
| return TRUE; | 
| } | 
|  | 
| -int JS_COMPARESTRING(CFX_WideString* ps1, CFX_WideString* ps2) { | 
| -  return ps1->Compare(*ps2); | 
| -} | 
| - | 
| FX_BOOL Field::getArray(IJS_Context* cc, | 
| const std::vector<CJS_Value>& params, | 
| CJS_Value& vRet, | 
| @@ -3095,35 +3095,38 @@ FX_BOOL Field::getArray(IJS_Context* cc, | 
| if (FieldArray.empty()) | 
| return FALSE; | 
|  | 
| -  CGW_ArrayTemplate<CFX_WideString*> swSort; | 
| +  std::vector<std::unique_ptr<CFX_WideString>> swSort; | 
| +  for (CPDF_FormField* pFormField : FieldArray) { | 
| +    swSort.push_back(std::unique_ptr<CFX_WideString>( | 
| +        new CFX_WideString(pFormField->GetFullName()))); | 
| +  } | 
|  | 
| -  for (CPDF_FormField* pFormField : FieldArray) | 
| -    swSort.Add(new CFX_WideString(pFormField->GetFullName())); | 
| -  swSort.Sort(JS_COMPARESTRING); | 
| +  std::sort( | 
| +      swSort.begin(), swSort.end(), | 
| +      [](const std::unique_ptr<CFX_WideString>& p1, | 
| +         const std::unique_ptr<CFX_WideString>& p2) { return *p1 < *p2; }); | 
|  | 
| CJS_Context* pContext = (CJS_Context*)cc; | 
| CJS_Runtime* pRuntime = pContext->GetJSRuntime(); | 
| -  ASSERT(pRuntime); | 
| - | 
| CJS_Array FormFieldArray(pRuntime); | 
| -  for (int j = 0, jsz = swSort.GetSize(); j < jsz; j++) { | 
| -    std::unique_ptr<CFX_WideString> pStr(swSort.GetAt(j)); | 
| + | 
| +  int j = 0; | 
| +  for (const auto& pStr : swSort) { | 
| v8::Local<v8::Object> pObj = FXJS_NewFxDynamicObj( | 
| pRuntime->GetIsolate(), pRuntime, CJS_Field::g_nObjDefnID); | 
| ASSERT(!pObj.IsEmpty()); | 
|  | 
| CJS_Field* pJSField = | 
| -        (CJS_Field*)FXJS_GetPrivate(pRuntime->GetIsolate(), pObj); | 
| -    Field* pField = (Field*)pJSField->GetEmbedObject(); | 
| +        static_cast<CJS_Field*>(FXJS_GetPrivate(pRuntime->GetIsolate(), pObj)); | 
| +    Field* pField = static_cast<Field*>(pJSField->GetEmbedObject()); | 
| pField->AttachField(m_pJSDoc, *pStr); | 
|  | 
| CJS_Value FormFieldValue(pRuntime); | 
| FormFieldValue = pJSField; | 
| -    FormFieldArray.SetElement(j, FormFieldValue); | 
| +    FormFieldArray.SetElement(j++, FormFieldValue); | 
| } | 
|  | 
| vRet = FormFieldArray; | 
| -  swSort.RemoveAll(); | 
| return TRUE; | 
| } | 
|  | 
|  |