Avoid using NOTREACHED() in test code

Switch from NOTREACHED() to NOTREACHED_NORETURN(), or convert
unreachable conditionals into CHECKs.

Bug: pdfium:2008
Change-Id: Ic32de9e76ad07603251ed2a734ba8f8277e586a9
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/107751
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/samples/pdfium_test_write_helper.cc b/samples/pdfium_test_write_helper.cc
index 7ac49d7..9d57eb2 100644
--- a/samples/pdfium_test_write_helper.cc
+++ b/samples/pdfium_test_write_helper.cc
@@ -90,8 +90,7 @@
     return "RichMedia";
   if (subtype == FPDF_ANNOT_XFAWIDGET)
     return "XFAWidget";
-  NOTREACHED();
-  return "";
+  NOTREACHED_NORETURN();
 }
 
 void AppendFlagString(const char* flag, std::string* output) {
@@ -134,8 +133,7 @@
     return "Shading";
   if (type == FPDF_PAGEOBJ_FORM)
     return "Form";
-  NOTREACHED();
-  return "";
+  NOTREACHED_NORETURN();
 }
 
 std::vector<uint8_t> EncodePng(pdfium::span<const uint8_t> input,
@@ -162,7 +160,7 @@
                                           /*discard_transparency=*/false);
       break;
     default:
-      NOTREACHED();
+      NOTREACHED_NORETURN();
   }
   return png;
 }
diff --git a/testing/embedder_test.cpp b/testing/embedder_test.cpp
index 366088d..04b805d 100644
--- a/testing/embedder_test.cpp
+++ b/testing/embedder_test.cpp
@@ -24,8 +24,10 @@
 #include "testing/utils/hash.h"
 #include "testing/utils/path_service.h"
 #include "third_party/base/check.h"
+#include "third_party/base/check_op.h"
 #include "third_party/base/containers/contains.h"
 #include "third_party/base/notreached.h"
+#include "third_party/base/numerics/checked_math.h"
 #include "third_party/base/numerics/safe_conversions.h"
 
 namespace {
@@ -540,10 +542,8 @@
 void EmbedderTest::UnloadPageCommon(FPDF_PAGE page, bool do_events) {
   DCHECK(form_handle());
   int page_number = GetPageNumberForLoadedPage(page);
-  if (page_number < 0) {
-    NOTREACHED();
-    return;
-  }
+  CHECK_GE(page_number, 0);
+
   if (do_events) {
     FORM_DoPageAAction(page, form_handle(), FPDFPAGE_AACTION_CLOSE);
     FORM_OnBeforeClosePage(page, form_handle());
@@ -563,10 +563,8 @@
 
 ScopedFPDFBitmap EmbedderTest::RenderLoadedPageWithFlags(FPDF_PAGE page,
                                                          int flags) {
-  if (GetPageNumberForLoadedPage(page) < 0) {
-    NOTREACHED();
-    return nullptr;
-  }
+  int page_number = GetPageNumberForLoadedPage(page);
+  CHECK_GE(page_number, 0);
   return RenderPageWithFlags(page, form_handle(), flags);
 }
 
@@ -576,10 +574,8 @@
 
 ScopedFPDFBitmap EmbedderTest::RenderSavedPageWithFlags(FPDF_PAGE page,
                                                         int flags) {
-  if (GetPageNumberForSavedPage(page) < 0) {
-    NOTREACHED();
-    return nullptr;
-  }
+  int page_number = GetPageNumberForSavedPage(page);
+  CHECK_GE(page_number, 0);
   return RenderPageWithFlags(page, saved_form_handle(), flags);
 }
 
@@ -681,7 +677,7 @@
     case FPDFBitmap_BGRA:
       return 4;
     default:
-      NOTREACHED();
+      NOTREACHED_NORETURN();
       return 0;
   }
 }
@@ -733,10 +729,7 @@
   DCHECK(saved_form_handle());
 
   int page_number = GetPageNumberForSavedPage(page);
-  if (page_number < 0) {
-    NOTREACHED();
-    return;
-  }
+  CHECK_GE(page_number, 0);
 
   FORM_DoPageAAction(page, saved_form_handle(), FPDFPAGE_AACTION_CLOSE);
   FORM_OnBeforeClosePage(page, saved_form_handle());
@@ -853,15 +846,11 @@
                                      unsigned char* buf,
                                      unsigned long size) {
   std::string* new_file = static_cast<std::string*>(param);
-  if (!new_file || pos + size < pos) {
-    NOTREACHED();
-    return 0;
-  }
+  CHECK(new_file);
 
-  if (pos + size > new_file->size()) {
-    NOTREACHED();
-    return 0;
-  }
+  pdfium::base::CheckedNumeric<size_t> end = pos;
+  end += size;
+  CHECK_LE(end.ValueOrDie(), new_file->size());
 
   memcpy(buf, new_file->data() + pos, size);
   return 1;
diff --git a/testing/fuzzers/pdfium_fuzzer_helper.cc b/testing/fuzzers/pdfium_fuzzer_helper.cc
index f011b18..f1040ad 100644
--- a/testing/fuzzers/pdfium_fuzzer_helper.cc
+++ b/testing/fuzzers/pdfium_fuzzer_helper.cc
@@ -20,7 +20,8 @@
 #include "public/fpdf_dataavail.h"
 #include "public/fpdf_ext.h"
 #include "public/fpdf_text.h"
-#include "third_party/base/notreached.h"
+#include "third_party/base/check_op.h"
+#include "third_party/base/numerics/checked_math.h"
 #include "third_party/base/span.h"
 
 namespace {
@@ -34,10 +35,9 @@
                       unsigned char* pBuf,
                       unsigned long size) {
     FuzzerTestLoader* pLoader = static_cast<FuzzerTestLoader*>(param);
-    if (pos + size < pos || pos + size > pLoader->m_Span.size()) {
-      NOTREACHED();
-      return 0;
-    }
+    pdfium::base::CheckedNumeric<size_t> end = pos;
+    end += size;
+    CHECK_LE(end.ValueOrDie(), pLoader->m_Span.size());
 
     memcpy(pBuf, &pLoader->m_Span[pos], size);
     return 1;
diff --git a/testing/image_diff/image_diff_png.cpp b/testing/image_diff/image_diff_png.cpp
index 694a240..e3ceb91 100644
--- a/testing/image_diff/image_diff_png.cpp
+++ b/testing/image_diff/image_diff_png.cpp
@@ -16,6 +16,7 @@
 
 #include <string>
 
+#include "third_party/base/check_op.h"
 #include "third_party/base/notreached.h"
 
 #ifdef USE_SYSTEM_ZLIB
@@ -253,7 +254,7 @@
         state->output_channels = 1;
         break;
       default:
-        NOTREACHED();
+        NOTREACHED_NORETURN();
         break;
     }
   } else if (channels == 4) {
@@ -271,12 +272,11 @@
         state->output_channels = 4;
         break;
       default:
-        NOTREACHED();
+        NOTREACHED_NORETURN();
         break;
     }
   } else {
-    NOTREACHED();
-    longjmp(png_jmpbuf(png_ptr), 1);
+    NOTREACHED_NORETURN();
   }
 
   state->output->resize(state->width * state->output_channels * state->height);
@@ -288,11 +288,7 @@
                        int pass) {
   PngDecoderState* state =
       static_cast<PngDecoderState*>(png_get_progressive_ptr(png_ptr));
-
-  if (static_cast<int>(row_num) > state->height) {
-    NOTREACHED();
-    return;
-  }
+  CHECK_LE(static_cast<int>(row_num), state->height);
 
   uint8_t* base = nullptr;
   base = &state->output->front();
diff --git a/testing/test_loader.cpp b/testing/test_loader.cpp
index aac8429..a3fad8a 100644
--- a/testing/test_loader.cpp
+++ b/testing/test_loader.cpp
@@ -6,7 +6,8 @@
 
 #include <string.h>
 
-#include "third_party/base/notreached.h"
+#include "third_party/base/check_op.h"
+#include "third_party/base/numerics/checked_math.h"
 
 TestLoader::TestLoader(pdfium::span<const char> span) : m_Span(span) {}
 
@@ -16,10 +17,9 @@
                          unsigned char* pBuf,
                          unsigned long size) {
   TestLoader* pLoader = static_cast<TestLoader*>(param);
-  if (pos + size < pos || pos + size > pLoader->m_Span.size()) {
-    NOTREACHED();
-    return 0;
-  }
+  pdfium::base::CheckedNumeric<size_t> end = pos;
+  end += size;
+  CHECK_LE(end.ValueOrDie(), pLoader->m_Span.size());
 
   memcpy(pBuf, &pLoader->m_Span[pos], size);
   return 1;