Fix bad return value in WideString::Compare().

When comparing L"a" vs L"ab", the return value should be -1 or 1, not 0
or 1. Add a regression test for this case.

BUG=chromium:821454

Change-Id: I38e2d7ca62319b7a62f8d8afeb231b8ed3bd9e86
Reviewed-on: https://pdfium-review.googlesource.com/28570
Commit-Queue: Ryan Harrison <rharrison@chromium.org>
Reviewed-by: Ryan Harrison <rharrison@chromium.org>
diff --git a/core/fxcrt/widestring.cpp b/core/fxcrt/widestring.cpp
index 8d47564..7b5bf66 100644
--- a/core/fxcrt/widestring.cpp
+++ b/core/fxcrt/widestring.cpp
@@ -924,7 +924,7 @@
     return result;
   if (this_len == that_len)
     return 0;
-  return this_len < that_len;
+  return this_len < that_len ? -1 : 1;
 }
 
 int WideString::CompareNoCase(const wchar_t* lpsz) const {
diff --git a/core/fxcrt/widestring_unittest.cpp b/core/fxcrt/widestring_unittest.cpp
index 2fb9e8c..473d59c 100644
--- a/core/fxcrt/widestring_unittest.cpp
+++ b/core/fxcrt/widestring_unittest.cpp
@@ -52,15 +52,18 @@
 TEST(WideString, OperatorLT) {
   WideString empty;
   WideString a(L"a");
+  WideString ab(L"ab");
   WideString abc(L"\x0110qq");  // Comes before despite endianness.
   WideString def(L"\x1001qq");  // Comes after despite endianness.
   WideStringView v_empty;
   WideStringView v_a(L"a");
+  WideStringView v_ab(L"ab");
   WideStringView v_abc(L"\x0110qq");
   WideStringView v_def(L"\x1001qq");
   const wchar_t* const c_null = nullptr;
   const wchar_t* const c_empty = L"";
   const wchar_t* const c_a = L"a";
+  const wchar_t* const c_ab = L"ab";
   const wchar_t* const c_abc = L"\x0110qq";
   const wchar_t* const c_def = L"\x1001qq";
 
@@ -142,6 +145,14 @@
   EXPECT_FALSE(def < c_abc);
   EXPECT_TRUE(abc < v_def);
   EXPECT_FALSE(def < v_abc);
+
+  EXPECT_TRUE(a < ab);
+  EXPECT_TRUE(a < c_ab);
+  EXPECT_TRUE(a < v_ab);
+  EXPECT_TRUE(c_a < ab);
+  EXPECT_TRUE(c_a < v_ab);
+  EXPECT_TRUE(v_a < c_ab);
+  EXPECT_TRUE(v_a < v_ab);
 }
 
 TEST(WideString, OperatorEQ) {