Remove FXSYS_wcsnicmp() and its unsafe buffer usage.

Use WideStringView::EqualsASCIINoCase() in all remaining cases.

Change-Id: I9a83e74c92189d20eab7b6fd417ecdb6abf5eb18
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/117031
Commit-Queue: Tom Sepez <tsepez@chromium.org>
Reviewed-by: Lei Zhang <thestig@chromium.org>
Reviewed-by: Thomas Sepez <tsepez@google.com>
diff --git a/core/fxcrt/fx_extension.cpp b/core/fxcrt/fx_extension.cpp
index 77afea1..d9206af 100644
--- a/core/fxcrt/fx_extension.cpp
+++ b/core/fxcrt/fx_extension.cpp
@@ -140,24 +140,6 @@
   return dstStr;
 }
 
-int32_t FXSYS_wcsnicmp(const wchar_t* s1, const wchar_t* s2, size_t count) {
-  DCHECK(s1);
-  DCHECK(s2);
-  DCHECK(count > 0);
-
-  // SAFETY: TODO(tsepez): This is UNSAFE_BUFFER_USAGE as well.
-  UNSAFE_BUFFERS({
-    while (count-- > 0) {
-      wchar_t wch1 = static_cast<wchar_t>(FXSYS_towlower(*s1++));
-      wchar_t wch2 = static_cast<wchar_t>(FXSYS_towlower(*s2++));
-      if (wch1 != wch2) {
-        return wch1 > wch2 ? 1 : -1;
-      }
-    }
-  });
-  return 0;
-}
-
 void FXSYS_IntToTwoHexChars(uint8_t n, char* buf) {
   static const char kHex[] = "0123456789ABCDEF";
   // SAFETY: TODO(tsepez): This is UNSAFE_BUFFER_USAGE as well.
diff --git a/core/fxcrt/fx_extension.h b/core/fxcrt/fx_extension.h
index ae94479..4b55094 100644
--- a/core/fxcrt/fx_extension.h
+++ b/core/fxcrt/fx_extension.h
@@ -26,7 +26,6 @@
 
 float FXSYS_wcstof(const wchar_t* pwsStr, size_t nLength, size_t* pUsedLen);
 wchar_t* FXSYS_wcsncpy(wchar_t* dstStr, const wchar_t* srcStr, size_t count);
-int32_t FXSYS_wcsnicmp(const wchar_t* s1, const wchar_t* s2, size_t count);
 
 inline bool FXSYS_iswlower(int32_t c) {
   return u_islower(c);
diff --git a/core/fxcrt/fx_extension_unittest.cpp b/core/fxcrt/fx_extension_unittest.cpp
index 924d8ce..8a4b012 100644
--- a/core/fxcrt/fx_extension_unittest.cpp
+++ b/core/fxcrt/fx_extension_unittest.cpp
@@ -192,32 +192,6 @@
   EXPECT_EQ(131u, used_len);
 }
 
-TEST(fxcrt, FXSYS_wcsnicmp) {
-  EXPECT_EQ(FXSYS_wcsnicmp(L"foo", L"foo", 1), 0);
-  EXPECT_EQ(FXSYS_wcsnicmp(L"foo", L"foo", 2), 0);
-  EXPECT_EQ(FXSYS_wcsnicmp(L"foo", L"foo", 3), 0);
-
-  EXPECT_GT(FXSYS_wcsnicmp(L"foo", L"barr", 3), 0);
-  EXPECT_LT(FXSYS_wcsnicmp(L"bar", L"fooo", 3), 0);
-
-  EXPECT_EQ(FXSYS_wcsnicmp(L"FOO", L"foo", 3), 0);
-  EXPECT_EQ(FXSYS_wcsnicmp(L"foO", L"Foo", 3), 0);
-  EXPECT_EQ(FXSYS_wcsnicmp(L"food", L"FOOT", 3), 0);
-  EXPECT_LT(FXSYS_wcsnicmp(L"food", L"FOOT", 4), 0);
-
-  const wchar_t kMax16bitSigned[] = {
-      static_cast<wchar_t>(std::numeric_limits<int16_t>::max()), 0};
-  EXPECT_GT(FXSYS_wcsnicmp(kMax16bitSigned, L"f", 1), 0);
-  const wchar_t kMax16bitUnsigned[] = {
-      static_cast<wchar_t>(std::numeric_limits<uint16_t>::max()), 0};
-  EXPECT_GT(FXSYS_wcsnicmp(kMax16bitUnsigned, L"f", 1), 0);
-
-#if defined(WCHAR_T_IS_32_BIT)
-  const wchar_t kMaxUnicode[] = {static_cast<wchar_t>(0x10ffff), 0};
-  EXPECT_GT(FXSYS_wcsnicmp(kMaxUnicode, L"f", 1), 0);
-#endif
-}
-
 TEST(fxcrt, FXSYS_SafeOps) {
   const float fMin = std::numeric_limits<float>::min();
   const float fMax = std::numeric_limits<float>::max();
diff --git a/core/fxcrt/xml/cfx_xmlparser.cpp b/core/fxcrt/xml/cfx_xmlparser.cpp
index e94f78c..5d19777 100644
--- a/core/fxcrt/xml/cfx_xmlparser.cpp
+++ b/core/fxcrt/xml/cfx_xmlparser.cpp
@@ -345,12 +345,12 @@
           current_buffer_idx++;
           break;
         case FDE_XmlSyntaxState::SkipCommentOrDecl: {
-          auto current_span =
-              pdfium::make_span(buffer).subspan(current_buffer_idx);
-          if (FXSYS_wcsnicmp(current_span.data(), L"--", 2) == 0) {
+          auto current_view = WideStringView(
+              pdfium::make_span(buffer).subspan(current_buffer_idx));
+          if (current_view.First(2).EqualsASCII("--")) {
             current_buffer_idx += 2;
             current_parser_state = FDE_XmlSyntaxState::SkipComment;
-          } else if (FXSYS_wcsnicmp(current_span.data(), L"[CDATA[", 7) == 0) {
+          } else if (current_view.First(7).EqualsASCIINoCase("[CDATA[")) {
             current_buffer_idx += 7;
             current_parser_state = FDE_XmlSyntaxState::SkipCData;
           } else {
@@ -361,9 +361,9 @@
           break;
         }
         case FDE_XmlSyntaxState::SkipCData: {
-          auto current_span =
-              pdfium::make_span(buffer).subspan(current_buffer_idx);
-          if (FXSYS_wcsnicmp(current_span.data(), L"]]>", 3) == 0) {
+          auto current_view = WideStringView(
+              pdfium::make_span(buffer).subspan(current_buffer_idx));
+          if (current_view.First(3).EqualsASCII("]]>")) {
             current_buffer_idx += 3;
             current_parser_state = FDE_XmlSyntaxState::Text;
             current_node_->AppendLastChild(
@@ -424,9 +424,9 @@
           }
           break;
         case FDE_XmlSyntaxState::SkipComment: {
-          auto current_span =
-              pdfium::make_span(buffer).subspan(current_buffer_idx);
-          if (FXSYS_wcsnicmp(current_span.data(), L"-->", 3) == 0) {
+          auto current_view = WideStringView(
+              pdfium::make_span(buffer).subspan(current_buffer_idx));
+          if (current_view.First(3).EqualsASCII("-->")) {
             current_buffer_idx += 2;
             current_parser_state = FDE_XmlSyntaxState::Text;
           }