Cleanup CFX_XMLParser entity conversion

This CL converts the CFX_XMLParser to use the FXSYS methods to convert
decimal and hex chars during entity conversion.

Change-Id: I7f6c83fc528e95c9f4c2bcdb04f0066da2c15c09
Reviewed-on: https://pdfium-review.googlesource.com/31274
Commit-Queue: dsinclair <dsinclair@chromium.org>
Reviewed-by: Henrique Nakashima <hnakashima@chromium.org>
Reviewed-by: Ryan Harrison <rharrison@chromium.org>
diff --git a/core/fxcrt/xml/cfx_xmlparser.cpp b/core/fxcrt/xml/cfx_xmlparser.cpp
index 09ae64e..21bbbbe 100644
--- a/core/fxcrt/xml/cfx_xmlparser.cpp
+++ b/core/fxcrt/xml/cfx_xmlparser.cpp
@@ -661,26 +661,17 @@
     if (iLen > 0) {
       if (csEntity[0] == L'#') {
         uint32_t ch = 0;
-        wchar_t w;
         if (iLen > 1 && csEntity[1] == L'x') {
           for (int32_t i = 2; i < iLen; i++) {
-            w = csEntity[i];
-            if (std::iswdigit(w))
-              ch = (ch << 4) + w - L'0';
-            else if (w >= L'A' && w <= L'F')
-              ch = (ch << 4) + w - 55;
-            else if (w >= L'a' && w <= L'f')
-              ch = (ch << 4) + w - 87;
-            else
+            if (!FXSYS_isHexDigit(csEntity[i]))
               break;
+            ch = (ch << 4) + FXSYS_HexCharToInt(csEntity[i]);
           }
         } else {
           for (int32_t i = 1; i < iLen; i++) {
-            w = csEntity[i];
-            if (!std::iswdigit(w))
+            if (!FXSYS_isDecimalDigit(csEntity[i]))
               break;
-
-            ch = ch * 10 + w - L'0';
+            ch = ch * 10 + FXSYS_DecimalCharToInt(csEntity[i]);
           }
         }
         if (ch > kMaxCharRange)
diff --git a/core/fxcrt/xml/cfx_xmlparser_unittest.cpp b/core/fxcrt/xml/cfx_xmlparser_unittest.cpp
index badac2c..0b51c6b 100644
--- a/core/fxcrt/xml/cfx_xmlparser_unittest.cpp
+++ b/core/fxcrt/xml/cfx_xmlparser_unittest.cpp
@@ -429,11 +429,18 @@
 TEST(CFX_XMLParserTest, Entities) {
   const char* input =
       "<script contentType=\"application/x-javascript\">"
-      "&#66;"
-      "&#x54;"
-      "&#x00000000000000000048;"
-      "&#x0000000000000000AB48;"
+      "&#66;"                     // B
+      "&#x54;"                    // T
+      "&#x6a;"                    // j
+      "&#x00000000000000000048;"  // H
+      "&#x0000000000000000AB48;"  // \xab48
       "&#x0000000000000000000;"
+      "&amp;"
+      "&lt;"
+      "&gt;"
+      "&apos;"
+      "&quot;"
+      "&something_else;"
       "</script>";
 
   auto stream = MakeProxy(input);
@@ -451,7 +458,7 @@
 
   ASSERT_EQ(FX_XmlSyntaxResult::ElementBreak, parser.DoSyntaxParse());
   ASSERT_EQ(FX_XmlSyntaxResult::Text, parser.DoSyntaxParse());
-  ASSERT_EQ(L"BTH\xab48", parser.GetTextData());
+  ASSERT_EQ(L"BTjH\xab48&<>'\"", parser.GetTextData());
 
   ASSERT_EQ(FX_XmlSyntaxResult::ElementClose, parser.DoSyntaxParse());
   ASSERT_EQ(L"script", parser.GetTextData());