Split GifDecoder::Status and CFX_LZWDecoder::Status

They are similar but not quite the same as indicated by a comment
which no longer exists.

Change-Id: Ife27823f2f9fefef881eb4886955a8f202723bc8
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/80692
Commit-Queue: Tom Sepez <tsepez@chromium.org>
Reviewed-by: Lei Zhang <thestig@chromium.org>
diff --git a/core/fxcodec/gif/cfx_gifcontext.cpp b/core/fxcodec/gif/cfx_gifcontext.cpp
index 66dea4b..42f6d9b 100644
--- a/core/fxcodec/gif/cfx_gifcontext.cpp
+++ b/core/fxcodec/gif/cfx_gifcontext.cpp
@@ -240,27 +240,27 @@
       SaveDecodingStatus(GIF_D_STATUS_IMG_DATA);
       img_row_offset_ += img_row_avail_size_;
       img_row_avail_size_ = gif_img_row_bytes - img_row_offset_;
-      GifDecoder::Status ret =
+      CFX_LZWDecompressor::Status ret =
           lzw_decompressor_.get()
               ? lzw_decompressor_->Decode(
                     img_data.data(), img_data_size,
                     gif_image->row_buffer.data() + img_row_offset_,
                     &img_row_avail_size_)
-              : GifDecoder::Status::kError;
-      if (ret == GifDecoder::Status::kError) {
+              : CFX_LZWDecompressor::Status::kError;
+      if (ret == CFX_LZWDecompressor::Status::kError) {
         DecodingFailureAtTailCleanup(gif_image);
         return GifDecoder::Status::kError;
       }
 
-      while (ret != GifDecoder::Status::kError) {
-        if (ret == GifDecoder::Status::kSuccess) {
+      while (ret != CFX_LZWDecompressor::Status::kError) {
+        if (ret == CFX_LZWDecompressor::Status::kSuccess) {
           ReadScanline(gif_image->row_num, gif_image->row_buffer.data());
           gif_image->row_buffer.clear();
           SaveDecodingStatus(GIF_D_STATUS_TAIL);
           return GifDecoder::Status::kSuccess;
         }
 
-        if (ret == GifDecoder::Status::kUnfinished) {
+        if (ret == CFX_LZWDecompressor::Status::kUnfinished) {
           read_marker = input_buffer_->GetPosition();
           if (!ReadAllOrNone(&img_data_size, sizeof(img_data_size)))
             return GifDecoder::Status::kUnfinished;
@@ -284,11 +284,11 @@
                             img_data.data(), img_data_size,
                             gif_image->row_buffer.data() + img_row_offset_,
                             &img_row_avail_size_)
-                      : GifDecoder::Status::kError;
+                      : CFX_LZWDecompressor::Status::kError;
           }
         }
 
-        if (ret == GifDecoder::Status::kInsufficientDestSize) {
+        if (ret == CFX_LZWDecompressor::Status::kInsufficientDestSize) {
           if (gif_image->image_info.local_flags.interlace) {
             ReadScanline(gif_image->row_num, gif_image->row_buffer.data());
             gif_image->row_num += kGifInterlaceStep[img_pass_num_];
@@ -311,11 +311,11 @@
                           img_data.data(), img_data_size,
                           gif_image->row_buffer.data() + img_row_offset_,
                           &img_row_avail_size_)
-                    : GifDecoder::Status::kError;
+                    : CFX_LZWDecompressor::Status::kError;
         }
 
-        if (ret == GifDecoder::Status::kInsufficientDestSize ||
-            ret == GifDecoder::Status::kError) {
+        if (ret == CFX_LZWDecompressor::Status::kInsufficientDestSize ||
+            ret == CFX_LZWDecompressor::Status::kError) {
           DecodingFailureAtTailCleanup(gif_image);
           return GifDecoder::Status::kError;
         }
diff --git a/core/fxcodec/gif/cfx_lzwdecompressor.cpp b/core/fxcodec/gif/cfx_lzwdecompressor.cpp
index 3b8fa62..144dca6 100644
--- a/core/fxcodec/gif/cfx_lzwdecompressor.cpp
+++ b/core/fxcodec/gif/cfx_lzwdecompressor.cpp
@@ -35,15 +35,15 @@
 
 CFX_LZWDecompressor::~CFX_LZWDecompressor() = default;
 
-GifDecoder::Status CFX_LZWDecompressor::Decode(const uint8_t* src_buf,
-                                               uint32_t src_size,
-                                               uint8_t* dest_buf,
-                                               uint32_t* dest_size) {
+CFX_LZWDecompressor::Status CFX_LZWDecompressor::Decode(const uint8_t* src_buf,
+                                                        uint32_t src_size,
+                                                        uint8_t* dest_buf,
+                                                        uint32_t* dest_size) {
   if (!src_buf || src_size == 0 || !dest_buf || !dest_size)
-    return GifDecoder::Status::kError;
+    return Status::kError;
 
   if (*dest_size == 0)
-    return GifDecoder::Status::kInsufficientDestSize;
+    return Status::kInsufficientDestSize;
 
   next_in_ = src_buf;
   avail_in_ = src_size;
@@ -54,7 +54,7 @@
   if (decompressed_next_ != 0) {
     uint32_t extracted_size = ExtractData(dest_buf, *dest_size);
     if (decompressed_next_ != 0)
-      return GifDecoder::Status::kInsufficientDestSize;
+      return Status::kInsufficientDestSize;
 
     dest_buf += extracted_size;
     i += extracted_size;
@@ -62,17 +62,17 @@
 
   while (i <= *dest_size && (avail_in_ > 0 || bits_left_ >= code_size_cur_)) {
     if (code_size_cur_ > GIF_MAX_LZW_EXP)
-      return GifDecoder::Status::kError;
+      return Status::kError;
 
     if (avail_in_ > 0) {
       if (bits_left_ > 31)
-        return GifDecoder::Status::kError;
+        return Status::kError;
 
       FX_SAFE_UINT32 safe_code = *next_in_++;
       safe_code <<= bits_left_;
       safe_code |= code_store_;
       if (!safe_code.IsValid())
-        return GifDecoder::Status::kError;
+        return Status::kError;
 
       code_store_ = safe_code.ValueOrDie();
       --avail_in_;
@@ -90,7 +90,7 @@
       }
       if (code == code_end_) {
         *dest_size = i;
-        return GifDecoder::Status::kSuccess;
+        return Status::kSuccess;
       }
 
       if (code_old_ != static_cast<uint16_t>(-1)) {
@@ -98,12 +98,12 @@
           if (code == code_next_) {
             AddCode(code_old_, code_first_);
             if (!DecodeString(code))
-              return GifDecoder::Status::kError;
+              return Status::kError;
           } else if (code > code_next_) {
-            return GifDecoder::Status::kError;
+            return Status::kError;
           } else {
             if (!DecodeString(code))
-              return GifDecoder::Status::kError;
+              return Status::kError;
 
             uint8_t append_char = decompressed_[decompressed_next_ - 1];
             AddCode(code_old_, append_char);
@@ -111,13 +111,13 @@
         }
       } else {
         if (!DecodeString(code))
-          return GifDecoder::Status::kError;
+          return Status::kError;
       }
 
       code_old_ = code;
       uint32_t extracted_size = ExtractData(dest_buf, *dest_size - i);
       if (decompressed_next_ != 0)
-        return GifDecoder::Status::kInsufficientDestSize;
+        return Status::kInsufficientDestSize;
 
       dest_buf += extracted_size;
       i += extracted_size;
@@ -125,10 +125,10 @@
   }
 
   if (avail_in_ != 0)
-    return GifDecoder::Status::kError;
+    return Status::kError;
 
   *dest_size = i;
-  return GifDecoder::Status::kUnfinished;
+  return Status::kUnfinished;
 }
 
 void CFX_LZWDecompressor::ClearTable() {
diff --git a/core/fxcodec/gif/cfx_lzwdecompressor.h b/core/fxcodec/gif/cfx_lzwdecompressor.h
index 979686c..f1628ac 100644
--- a/core/fxcodec/gif/cfx_lzwdecompressor.h
+++ b/core/fxcodec/gif/cfx_lzwdecompressor.h
@@ -11,11 +11,17 @@
 #include <vector>
 
 #include "core/fxcodec/gif/cfx_gif.h"
-#include "core/fxcodec/gif/gif_decoder.h"
 #include "core/fxcrt/fx_memory_wrappers.h"
 
 class CFX_LZWDecompressor {
  public:
+  enum class Status {
+    kError,
+    kSuccess,
+    kUnfinished,
+    kInsufficientDestSize,
+  };
+
   struct CodeEntry {
     uint16_t prefix;
     uint8_t suffix;
@@ -26,10 +32,10 @@
                                                      uint8_t code_exp);
   ~CFX_LZWDecompressor();
 
-  GifDecoder::Status Decode(const uint8_t* src_buf,
-                            uint32_t src_size,
-                            uint8_t* dest_buf,
-                            uint32_t* dest_size);
+  Status Decode(const uint8_t* src_buf,
+                uint32_t src_size,
+                uint8_t* dest_buf,
+                uint32_t* dest_size);
 
   // Used by unittests, should not be called in production code.
   uint32_t ExtractDataForTest(uint8_t* dest_buf, uint32_t dest_size) {
diff --git a/core/fxcodec/gif/cfx_lzwdecompressor_unittest.cpp b/core/fxcodec/gif/cfx_lzwdecompressor_unittest.cpp
index e952fa0..1e42c1b 100644
--- a/core/fxcodec/gif/cfx_lzwdecompressor_unittest.cpp
+++ b/core/fxcodec/gif/cfx_lzwdecompressor_unittest.cpp
@@ -92,19 +92,19 @@
   uint32_t output_size = pdfium::size(output_data);
 
   EXPECT_EQ(
-      GifDecoder::Status::kError,
+      CFX_LZWDecompressor::Status::kError,
       decompressor->Decode(nullptr, image_size, output_data, &output_size));
-  EXPECT_EQ(GifDecoder::Status::kError,
+  EXPECT_EQ(CFX_LZWDecompressor::Status::kError,
             decompressor->Decode(image_data, 0, output_data, &output_size));
   EXPECT_EQ(
-      GifDecoder::Status::kError,
+      CFX_LZWDecompressor::Status::kError,
       decompressor->Decode(image_data, image_size, nullptr, &output_size));
-  EXPECT_EQ(GifDecoder::Status::kError,
+  EXPECT_EQ(CFX_LZWDecompressor::Status::kError,
             decompressor->Decode(image_data, image_size, output_data, nullptr));
 
   output_size = 0;
   EXPECT_EQ(
-      GifDecoder::Status::kInsufficientDestSize,
+      CFX_LZWDecompressor::Status::kInsufficientDestSize,
       decompressor->Decode(image_data, image_size, output_data, &output_size));
 }
 
@@ -123,7 +123,7 @@
   uint32_t output_size = pdfium::size(output_data);
 
   EXPECT_EQ(
-      GifDecoder::Status::kSuccess,
+      CFX_LZWDecompressor::Status::kSuccess,
       decompressor->Decode(image_data, image_size, output_data, &output_size));
 
   EXPECT_EQ(pdfium::size(output_data), output_size);
@@ -155,7 +155,7 @@
   uint32_t output_size = pdfium::size(output_data);
 
   EXPECT_EQ(
-      GifDecoder::Status::kSuccess,
+      CFX_LZWDecompressor::Status::kSuccess,
       decompressor->Decode(kImageData, image_size, output_data, &output_size));
 
   EXPECT_EQ(pdfium::size(output_data), output_size);
@@ -189,7 +189,7 @@
   uint32_t output_size = pdfium::size(output_data);
 
   EXPECT_EQ(
-      GifDecoder::Status::kSuccess,
+      CFX_LZWDecompressor::Status::kSuccess,
       decompressor->Decode(kImageData, image_size, output_data, &output_size));
 
   EXPECT_EQ(pdfium::size(output_data), output_size);
@@ -214,6 +214,6 @@
   uint32_t output_size = pdfium::size(output_data);
 
   EXPECT_EQ(
-      GifDecoder::Status::kError,
+      CFX_LZWDecompressor::Status::kError,
       decompressor->Decode(kImageData, image_size, output_data, &output_size));
 }
diff --git a/core/fxcodec/gif/gif_decoder.h b/core/fxcodec/gif/gif_decoder.h
index 9a4df57..53b665a 100644
--- a/core/fxcodec/gif/gif_decoder.h
+++ b/core/fxcodec/gif/gif_decoder.h
@@ -28,7 +28,6 @@
     kError,
     kSuccess,
     kUnfinished,
-    kInsufficientDestSize,  // Only used internally by CGifLZWDecoder::Decode()
   };
 
   class Delegate {
diff --git a/testing/fuzzers/pdf_lzw_fuzzer.cc b/testing/fuzzers/pdf_lzw_fuzzer.cc
index e868ae4..9ab5886 100644
--- a/testing/fuzzers/pdf_lzw_fuzzer.cc
+++ b/testing/fuzzers/pdf_lzw_fuzzer.cc
@@ -27,7 +27,7 @@
     // This cast should be safe since the caller is checking for overflow on
     // the initial data.
     uint32_t dest_size = static_cast<uint32_t>(dest_buf.size());
-    if (GifDecoder::Status::kInsufficientDestSize !=
+    if (CFX_LZWDecompressor::Status::kInsufficientDestSize !=
         decompressor->Decode(src_buf, src_size, dest_buf.data(), &dest_size)) {
       return;
     }