Avoid out-of-bound access in CPDF_TextPageFind::FindNext()

Return false if `nStartPos` goes out of bounds. Update the relevant test
case now that the crash no longer occurs.

Bug: pdfium:2104
Change-Id: I401137d582f9d33b7d40245bbfdbee2b834255b9
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/114711
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/core/fpdftext/cpdf_textpagefind.cpp b/core/fpdftext/cpdf_textpagefind.cpp
index 0d9fb68..9d8a534 100644
--- a/core/fpdftext/cpdf_textpagefind.cpp
+++ b/core/fpdftext/cpdf_textpagefind.cpp
@@ -287,6 +287,9 @@
       size_t index = bSpaceStart ? 1 : 0;
       nStartPos = m_resStart + m_csFindWhatArray[index].GetLength();
     }
+    if (nStartPos >= strLen) {
+      return false;
+    }
   }
   m_resEnd = nResultPos.value() + m_csFindWhatArray.back().GetLength() - 1;
   if (m_options.bConsecutive) {
diff --git a/fpdfsdk/fpdf_text_embeddertest.cpp b/fpdfsdk/fpdf_text_embeddertest.cpp
index 425556a..8a57681 100644
--- a/fpdfsdk/fpdf_text_embeddertest.cpp
+++ b/fpdfsdk/fpdf_text_embeddertest.cpp
@@ -512,8 +512,7 @@
     EXPECT_EQ(10, FPDFText_GetSchResultIndex(search.get()));
     EXPECT_EQ(4, FPDFText_GetSchCount(search.get()));
 
-    // TODO(crbug.com/pdfium/2104): Enable the code below. It should not crash.
-    // EXPECT_FALSE(FPDFText_FindNext(search.get()));
+    EXPECT_FALSE(FPDFText_FindNext(search.get()));
   }
 
   UnloadPage(page);