Add BmpModule::Status enum class.

Use it in place of int as a return type, so the return values are more
meaningful.

Change-Id: Ibbcb3a652246b1fae0ec7bb05e22df6b53b2e3e1
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/56090
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/core/fxcodec/bmp/cfx_bmpdecompressor.cpp b/core/fxcodec/bmp/cfx_bmpdecompressor.cpp
index 32362da..f494b8e 100644
--- a/core/fxcodec/bmp/cfx_bmpdecompressor.cpp
+++ b/core/fxcodec/bmp/cfx_bmpdecompressor.cpp
@@ -344,7 +344,7 @@
   }
 }
 
-int32_t CFX_BmpDecompressor::DecodeImage() {
+BmpModule::Status CFX_BmpDecompressor::DecodeImage() {
   if (decode_status_ == DecodeStatus::kDataPre) {
     input_buffer_->Seek(0);
     if (!GetDataPosition(header_offset_)) {
@@ -370,7 +370,7 @@
     case kBmpRle4:
       return DecodeRLE4();
     default:
-      return 0;
+      return BmpModule::Status::kFail;
   }
 }
 
@@ -383,12 +383,12 @@
   return true;
 }
 
-int32_t CFX_BmpDecompressor::DecodeRGB() {
+BmpModule::Status CFX_BmpDecompressor::DecodeRGB() {
   std::vector<uint8_t> dest_buf(src_row_bytes_);
   while (row_num_ < height_) {
     size_t idx = 0;
     if (!ReadData(dest_buf.data(), src_row_bytes_))
-      return 2;
+      return BmpModule::Status::kContinue;
 
     SaveDecodingStatus(DecodeStatus::kData);
     switch (bit_counts_) {
@@ -422,7 +422,7 @@
         green_bits += blue_bits;
         red_bits += green_bits;
         if (blue_bits > 8 || green_bits < 8 || red_bits < 8)
-          return 2;
+          return BmpModule::Status::kContinue;
         blue_bits = 8 - blue_bits;
         green_bits -= 8;
         red_bits -= 8;
@@ -448,25 +448,25 @@
     }
     for (uint8_t byte : out_row_buffer_) {
       if (!ValidateColorIndex(byte))
-        return 0;
+        return BmpModule::Status::kFail;
     }
     ReadNextScanline();
   }
   SaveDecodingStatus(DecodeStatus::kTail);
-  return 1;
+  return BmpModule::Status::kSuccess;
 }
 
-int32_t CFX_BmpDecompressor::DecodeRLE8() {
+BmpModule::Status CFX_BmpDecompressor::DecodeRLE8() {
   uint8_t first_part;
   col_num_ = 0;
   while (true) {
     if (!ReadData(&first_part, sizeof(first_part)))
-      return 2;
+      return BmpModule::Status::kContinue;
 
     switch (first_part) {
       case kRleMarker: {
         if (!ReadData(&first_part, sizeof(first_part)))
-          return 2;
+          return BmpModule::Status::kContinue;
 
         switch (first_part) {
           case kRleEol: {
@@ -486,12 +486,12 @@
             if (row_num_ < height_)
               ReadNextScanline();
             SaveDecodingStatus(DecodeStatus::kTail);
-            return 1;
+            return BmpModule::Status::kSuccess;
           }
           case kRleDelta: {
             uint8_t delta[2];
             if (!ReadData(delta, sizeof(delta)))
-              return 2;
+              return BmpModule::Status::kContinue;
 
             col_num_ += delta[0];
             size_t bmp_row_num__next = row_num_ + delta[1];
@@ -518,13 +518,13 @@
             std::vector<uint8_t> second_part(second_part_size);
             uint8_t* second_part_data = second_part.data();
             if (!ReadData(second_part_data, second_part_size))
-              return 2;
+              return BmpModule::Status::kContinue;
 
             std::copy(second_part_data, second_part_data + first_part,
                       out_row_buffer_.begin() + col_num_);
             for (size_t i = col_num_; i < col_num_ + first_part; ++i) {
               if (!ValidateColorIndex(out_row_buffer_[i]))
-                return 0;
+                return BmpModule::Status::kFail;
             }
             col_num_ += first_part;
           }
@@ -540,12 +540,12 @@
 
         uint8_t second_part;
         if (!ReadData(&second_part, sizeof(second_part)))
-          return 2;
+          return BmpModule::Status::kContinue;
 
         std::fill(out_row_buffer_.begin() + col_num_,
                   out_row_buffer_.begin() + col_num_ + first_part, second_part);
         if (!ValidateColorIndex(out_row_buffer_[col_num_]))
-          return 0;
+          return BmpModule::Status::kFail;
         col_num_ += first_part;
       }
     }
@@ -554,18 +554,18 @@
   NOTREACHED();
 }
 
-int32_t CFX_BmpDecompressor::DecodeRLE4() {
+BmpModule::Status CFX_BmpDecompressor::DecodeRLE4() {
   uint8_t first_part;
   col_num_ = 0;
   while (true) {
     if (!ReadData(&first_part, sizeof(first_part)))
-      return 2;
+      return BmpModule::Status::kContinue;
 
     switch (first_part) {
       case kRleMarker: {
-        if (!ReadData(&first_part, sizeof(first_part))) {
-          return 2;
-        }
+        if (!ReadData(&first_part, sizeof(first_part)))
+          return BmpModule::Status::kContinue;
+
         switch (first_part) {
           case kRleEol: {
             if (row_num_ >= height_) {
@@ -584,12 +584,12 @@
             if (row_num_ < height_)
               ReadNextScanline();
             SaveDecodingStatus(DecodeStatus::kTail);
-            return 1;
+            return BmpModule::Status::kSuccess;
           }
           case kRleDelta: {
             uint8_t delta[2];
             if (!ReadData(delta, sizeof(delta)))
-              return 2;
+              return BmpModule::Status::kContinue;
 
             col_num_ += delta[0];
             size_t bmp_row_num__next = row_num_ + delta[1];
@@ -623,13 +623,13 @@
             std::vector<uint8_t> second_part(second_part_size);
             uint8_t* second_part_data = second_part.data();
             if (!ReadData(second_part_data, second_part_size))
-              return 2;
+              return BmpModule::Status::kContinue;
 
             for (uint8_t i = 0; i < first_part; i++) {
               uint8_t color = (i & 0x01) ? (*second_part_data++ & 0x0F)
                                          : (*second_part_data & 0xF0) >> 4;
               if (!ValidateColorIndex(color))
-                return 0;
+                return BmpModule::Status::kFail;
 
               out_row_buffer_[col_num_++] = color;
             }
@@ -655,14 +655,14 @@
         }
         uint8_t second_part;
         if (!ReadData(&second_part, sizeof(second_part)))
-          return 2;
+          return BmpModule::Status::kContinue;
 
         for (uint8_t i = 0; i < first_part; i++) {
           uint8_t second_byte = second_part;
           second_byte =
               i & 0x01 ? (second_byte & 0x0F) : (second_byte & 0xF0) >> 4;
           if (!ValidateColorIndex(second_byte))
-            return 0;
+            return BmpModule::Status::kFail;
 
           out_row_buffer_[col_num_++] = second_byte;
         }
diff --git a/core/fxcodec/bmp/cfx_bmpdecompressor.h b/core/fxcodec/bmp/cfx_bmpdecompressor.h
index eb987b2..2d25141 100644
--- a/core/fxcodec/bmp/cfx_bmpdecompressor.h
+++ b/core/fxcodec/bmp/cfx_bmpdecompressor.h
@@ -12,6 +12,7 @@
 #include <vector>
 
 #include "core/fxcodec/bmp/fx_bmp.h"
+#include "core/fxcodec/codec/bmpmodule.h"
 #include "core/fxcrt/retain_ptr.h"
 #include "core/fxcrt/unowned_ptr.h"
 
@@ -24,7 +25,7 @@
   ~CFX_BmpDecompressor();
 
   void Error();
-  int32_t DecodeImage();
+  BmpModule::Status DecodeImage();
   bool ReadHeader();
   void SetInputBuffer(RetainPtr<CFX_CodecMemory> codec_memory);
   FX_FILESIZE GetAvailInput() const;
@@ -55,9 +56,9 @@
   bool ReadBmpPalette();
   bool GetDataPosition(uint32_t cur_pos);
   void ReadNextScanline();
-  int32_t DecodeRGB();
-  int32_t DecodeRLE8();
-  int32_t DecodeRLE4();
+  BmpModule::Status DecodeRGB();
+  BmpModule::Status DecodeRLE8();
+  BmpModule::Status DecodeRLE4();
   bool ReadData(uint8_t* destination, uint32_t size);
   void SaveDecodingStatus(DecodeStatus status);
   bool ValidateColorIndex(uint8_t val);
diff --git a/core/fxcodec/codec/bmpmodule.cpp b/core/fxcodec/codec/bmpmodule.cpp
index 26d1bfd..d052413 100644
--- a/core/fxcodec/codec/bmpmodule.cpp
+++ b/core/fxcodec/codec/bmpmodule.cpp
@@ -26,22 +26,22 @@
   return pdfium::MakeUnique<CFX_BmpContext>(this, pDelegate);
 }
 
-int32_t BmpModule::ReadHeader(Context* pContext,
-                              int32_t* width,
-                              int32_t* height,
-                              bool* tb_flag,
-                              int32_t* components,
-                              int32_t* pal_num,
-                              const std::vector<uint32_t>** palette,
-                              CFX_DIBAttribute* pAttribute) {
+BmpModule::Status BmpModule::ReadHeader(Context* pContext,
+                                        int32_t* width,
+                                        int32_t* height,
+                                        bool* tb_flag,
+                                        int32_t* components,
+                                        int32_t* pal_num,
+                                        const std::vector<uint32_t>** palette,
+                                        CFX_DIBAttribute* pAttribute) {
   ASSERT(pAttribute);
 
   auto* ctx = static_cast<CFX_BmpContext*>(pContext);
   if (setjmp(*ctx->m_Bmp.jmpbuf()))
-    return 0;
+    return Status::kFail;
 
   if (!ctx->m_Bmp.ReadHeader())
-    return 2;
+    return Status::kContinue;
 
   *width = ctx->m_Bmp.width();
   *height = ctx->m_Bmp.height();
@@ -52,13 +52,13 @@
   pAttribute->m_wDPIUnit = FXCODEC_RESUNIT_METER;
   pAttribute->m_nXDPI = ctx->m_Bmp.dpi_x();
   pAttribute->m_nYDPI = ctx->m_Bmp.dpi_y();
-  return 1;
+  return Status::kSuccess;
 }
 
-int32_t BmpModule::LoadImage(Context* pContext) {
+BmpModule::Status BmpModule::LoadImage(Context* pContext) {
   auto* ctx = static_cast<CFX_BmpContext*>(pContext);
   if (setjmp(*ctx->m_Bmp.jmpbuf()))
-    return 0;
+    return Status::kFail;
 
   return ctx->m_Bmp.DecodeImage();
 }
diff --git a/core/fxcodec/codec/bmpmodule.h b/core/fxcodec/codec/bmpmodule.h
index d96f4f5..3a8b257 100644
--- a/core/fxcodec/codec/bmpmodule.h
+++ b/core/fxcodec/codec/bmpmodule.h
@@ -25,6 +25,8 @@
                                  const std::vector<uint8_t>& row_buf) = 0;
   };
 
+  enum class Status : uint8_t { kFail, kSuccess, kContinue };
+
   BmpModule();
   ~BmpModule() override;
 
@@ -35,15 +37,15 @@
              CFX_DIBAttribute* pAttribute) override;
 
   std::unique_ptr<Context> Start(Delegate* pDelegate);
-  int32_t ReadHeader(Context* pContext,
-                     int32_t* width,
-                     int32_t* height,
-                     bool* tb_flag,
-                     int32_t* components,
-                     int32_t* pal_num,
-                     const std::vector<uint32_t>** palette,
-                     CFX_DIBAttribute* pAttribute);
-  int32_t LoadImage(Context* pContext);
+  Status ReadHeader(Context* pContext,
+                    int32_t* width,
+                    int32_t* height,
+                    bool* tb_flag,
+                    int32_t* components,
+                    int32_t* pal_num,
+                    const std::vector<uint32_t>** palette,
+                    CFX_DIBAttribute* pAttribute);
+  Status LoadImage(Context* pContext);
 };
 
 }  // namespace fxcodec
diff --git a/core/fxcodec/codec/ccodec_progressivedecoder.cpp b/core/fxcodec/codec/ccodec_progressivedecoder.cpp
index 45d32d6..433e88a 100644
--- a/core/fxcodec/codec/ccodec_progressivedecoder.cpp
+++ b/core/fxcodec/codec/ccodec_progressivedecoder.cpp
@@ -725,21 +725,21 @@
   pBmpModule->Input(pBmpContext.get(), m_pCodecMemory, nullptr);
 
   const std::vector<uint32_t>* palette;
-  int32_t readResult = pBmpModule->ReadHeader(
+  BmpModule::Status read_result = pBmpModule->ReadHeader(
       pBmpContext.get(), &m_SrcWidth, &m_SrcHeight, &m_BmpIsTopBottom,
       &m_SrcComponents, &m_SrcPaletteNumber, &palette, pAttribute);
-  while (readResult == 2) {
+  while (read_result == BmpModule::Status::kContinue) {
     FXCODEC_STATUS error_status = FXCODEC_STATUS_ERR_FORMAT;
     if (!BmpReadMoreData(pBmpModule, pBmpContext.get(), error_status)) {
       m_status = error_status;
       return false;
     }
-    readResult = pBmpModule->ReadHeader(
+    read_result = pBmpModule->ReadHeader(
         pBmpContext.get(), &m_SrcWidth, &m_SrcHeight, &m_BmpIsTopBottom,
         &m_SrcComponents, &m_SrcPaletteNumber, &palette, pAttribute);
   }
 
-  if (readResult != 1) {
+  if (read_result != BmpModule::Status::kSuccess) {
     m_status = FXCODEC_STATUS_ERR_FORMAT;
     return false;
   }
@@ -825,8 +825,8 @@
     return m_status;
   }
   while (true) {
-    int32_t readRes = pBmpModule->LoadImage(m_pBmpContext.get());
-    while (readRes == 2) {
+    BmpModule::Status read_res = pBmpModule->LoadImage(m_pBmpContext.get());
+    while (read_res == BmpModule::Status::kContinue) {
       FXCODEC_STATUS error_status = FXCODEC_STATUS_DECODE_FINISH;
       if (!BmpReadMoreData(pBmpModule, m_pBmpContext.get(), error_status)) {
         m_pDeviceBitmap = nullptr;
@@ -834,9 +834,9 @@
         m_status = error_status;
         return m_status;
       }
-      readRes = pBmpModule->LoadImage(m_pBmpContext.get());
+      read_res = pBmpModule->LoadImage(m_pBmpContext.get());
     }
-    if (readRes == 1) {
+    if (read_res == BmpModule::Status::kSuccess) {
       m_pDeviceBitmap = nullptr;
       m_pFile = nullptr;
       m_status = FXCODEC_STATUS_DECODE_FINISH;