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; }