Make CFX_BmpDecompressor members private.

Add the appropriate accessors to make the code build. Give access to an
std::vector by pointer so the caller can avoid copying the content of
the vector.

Change-Id: I5b8e368170259c857141aa677843138308d7565a
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/56011
Commit-Queue: Lei Zhang <thestig@chromium.org>
Reviewed-by: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fxcodec/bmp/cfx_bmpcontext.cpp b/core/fxcodec/bmp/cfx_bmpcontext.cpp
index d90bfc3..596d117 100644
--- a/core/fxcodec/bmp/cfx_bmpcontext.cpp
+++ b/core/fxcodec/bmp/cfx_bmpcontext.cpp
@@ -8,6 +8,6 @@
 
 CFX_BmpContext::CFX_BmpContext(BmpModule* pModule,
                                BmpModule::Delegate* pDelegate)
-    : m_pModule(pModule), m_pDelegate(pDelegate) {}
+    : m_Bmp(this), m_pModule(pModule), m_pDelegate(pDelegate) {}
 
-CFX_BmpContext::~CFX_BmpContext() {}
+CFX_BmpContext::~CFX_BmpContext() = default;
diff --git a/core/fxcodec/bmp/cfx_bmpdecompressor.cpp b/core/fxcodec/bmp/cfx_bmpdecompressor.cpp
index 9d1010a..2bff458 100644
--- a/core/fxcodec/bmp/cfx_bmpdecompressor.cpp
+++ b/core/fxcodec/bmp/cfx_bmpdecompressor.cpp
@@ -34,7 +34,8 @@
 
 }  // namespace
 
-CFX_BmpDecompressor::CFX_BmpDecompressor() = default;
+CFX_BmpDecompressor::CFX_BmpDecompressor(CFX_BmpContext* context)
+    : context_(context) {}
 
 CFX_BmpDecompressor::~CFX_BmpDecompressor() = default;
 
diff --git a/core/fxcodec/bmp/cfx_bmpdecompressor.h b/core/fxcodec/bmp/cfx_bmpdecompressor.h
index 61bda4a..574a831 100644
--- a/core/fxcodec/bmp/cfx_bmpdecompressor.h
+++ b/core/fxcodec/bmp/cfx_bmpdecompressor.h
@@ -20,7 +20,7 @@
 
 class CFX_BmpDecompressor {
  public:
-  CFX_BmpDecompressor();
+  explicit CFX_BmpDecompressor(CFX_BmpContext* context);
   ~CFX_BmpDecompressor();
 
   void Error();
@@ -29,8 +29,30 @@
   void SetInputBuffer(RetainPtr<CFX_CodecMemory> codec_memory);
   FX_FILESIZE GetAvailInput() const;
 
+  jmp_buf* jmpbuf() { return &jmpbuf_; }
+  const std::vector<uint32_t>* palette() const { return &palette_; }
+  uint32_t width() const { return width_; }
+  uint32_t height() const { return height_; }
+  int32_t components() const { return components_; }
+  bool img_tb_flag() const { return img_tb_flag_; }
+  int32_t pal_num() const { return pal_num_; }
+  int32_t dpi_x() const { return dpi_x_; }
+  int32_t dpi_y() const { return dpi_y_; }
+
+ private:
+  bool GetDataPosition(uint32_t cur_pos);
+  void ReadScanline(uint32_t row_num, const std::vector<uint8_t>& row_buf);
+  int32_t DecodeRGB();
+  int32_t DecodeRLE8();
+  int32_t DecodeRLE4();
+  bool ReadData(uint8_t* destination, uint32_t size);
+  void SaveDecodingStatus(int32_t status);
+  bool ValidateColorIndex(uint8_t val);
+  bool ValidateFlag() const;
+  void SetHeight(int32_t signed_height);
+
   jmp_buf jmpbuf_;
-  UnownedPtr<CFX_BmpContext> context_;
+  UnownedPtr<CFX_BmpContext> const context_;
   std::vector<uint8_t> out_row_buffer_;
   std::vector<uint32_t> palette_;
   uint32_t header_offset_ = 0;
@@ -55,19 +77,6 @@
   uint32_t mask_green_ = 0;
   uint32_t mask_blue_ = 0;
   int32_t decode_status_ = BMP_D_STATUS_HEADER;
-
- private:
-  bool GetDataPosition(uint32_t cur_pos);
-  void ReadScanline(uint32_t row_num, const std::vector<uint8_t>& row_buf);
-  int32_t DecodeRGB();
-  int32_t DecodeRLE8();
-  int32_t DecodeRLE4();
-  bool ReadData(uint8_t* destination, uint32_t size);
-  void SaveDecodingStatus(int32_t status);
-  bool ValidateColorIndex(uint8_t val);
-  bool ValidateFlag() const;
-  void SetHeight(int32_t signed_height);
-
   RetainPtr<CFX_CodecMemory> input_buffer_;
 };
 
diff --git a/core/fxcodec/codec/bmpmodule.cpp b/core/fxcodec/codec/bmpmodule.cpp
index 495285c..3ad8f0f 100644
--- a/core/fxcodec/codec/bmpmodule.cpp
+++ b/core/fxcodec/codec/bmpmodule.cpp
@@ -23,9 +23,7 @@
 
 std::unique_ptr<CodecModuleIface::Context> BmpModule::Start(
     Delegate* pDelegate) {
-  auto p = pdfium::MakeUnique<CFX_BmpContext>(this, pDelegate);
-  p->m_Bmp.context_ = p.get();
-  return p;
+  return pdfium::MakeUnique<CFX_BmpContext>(this, pDelegate);
 }
 
 int32_t BmpModule::ReadHeader(Context* pContext,
@@ -34,33 +32,33 @@
                               bool* tb_flag,
                               int32_t* components,
                               int32_t* pal_num,
-                              std::vector<uint32_t>* palette,
+                              const std::vector<uint32_t>** palette,
                               CFX_DIBAttribute* pAttribute) {
   ASSERT(pAttribute);
 
   auto* ctx = static_cast<CFX_BmpContext*>(pContext);
-  if (setjmp(ctx->m_Bmp.jmpbuf_))
+  if (setjmp(*ctx->m_Bmp.jmpbuf()))
     return 0;
 
   int32_t ret = ctx->m_Bmp.ReadHeader();
   if (ret != 1)
     return ret;
 
-  *width = ctx->m_Bmp.width_;
-  *height = ctx->m_Bmp.height_;
-  *tb_flag = ctx->m_Bmp.img_tb_flag_;
-  *components = ctx->m_Bmp.components_;
-  *pal_num = ctx->m_Bmp.pal_num_;
-  *palette = ctx->m_Bmp.palette_;
+  *width = ctx->m_Bmp.width();
+  *height = ctx->m_Bmp.height();
+  *tb_flag = ctx->m_Bmp.img_tb_flag();
+  *components = ctx->m_Bmp.components();
+  *pal_num = ctx->m_Bmp.pal_num();
+  *palette = ctx->m_Bmp.palette();
   pAttribute->m_wDPIUnit = FXCODEC_RESUNIT_METER;
-  pAttribute->m_nXDPI = ctx->m_Bmp.dpi_x_;
-  pAttribute->m_nYDPI = ctx->m_Bmp.dpi_y_;
+  pAttribute->m_nXDPI = ctx->m_Bmp.dpi_x();
+  pAttribute->m_nYDPI = ctx->m_Bmp.dpi_y();
   return 1;
 }
 
 int32_t BmpModule::LoadImage(Context* pContext) {
   auto* ctx = static_cast<CFX_BmpContext*>(pContext);
-  if (setjmp(ctx->m_Bmp.jmpbuf_))
+  if (setjmp(*ctx->m_Bmp.jmpbuf()))
     return 0;
 
   return ctx->m_Bmp.DecodeImage();
diff --git a/core/fxcodec/codec/bmpmodule.h b/core/fxcodec/codec/bmpmodule.h
index 70a1de9..d96f4f5 100644
--- a/core/fxcodec/codec/bmpmodule.h
+++ b/core/fxcodec/codec/bmpmodule.h
@@ -41,7 +41,7 @@
                      bool* tb_flag,
                      int32_t* components,
                      int32_t* pal_num,
-                     std::vector<uint32_t>* palette,
+                     const std::vector<uint32_t>** palette,
                      CFX_DIBAttribute* pAttribute);
   int32_t LoadImage(Context* pContext);
 };
diff --git a/core/fxcodec/codec/ccodec_progressivedecoder.cpp b/core/fxcodec/codec/ccodec_progressivedecoder.cpp
index 9413a95..45d32d6 100644
--- a/core/fxcodec/codec/ccodec_progressivedecoder.cpp
+++ b/core/fxcodec/codec/ccodec_progressivedecoder.cpp
@@ -724,7 +724,7 @@
       pBmpModule->Start(this);
   pBmpModule->Input(pBmpContext.get(), m_pCodecMemory, nullptr);
 
-  std::vector<uint32_t> palette;
+  const std::vector<uint32_t>* palette;
   int32_t readResult = pBmpModule->ReadHeader(
       pBmpContext.get(), &m_SrcWidth, &m_SrcHeight, &m_BmpIsTopBottom,
       &m_SrcComponents, &m_SrcPaletteNumber, &palette, pAttribute);
@@ -784,7 +784,7 @@
   m_pBmpContext = std::move(pBmpContext);
   if (m_SrcPaletteNumber) {
     m_pSrcPalette.reset(FX_Alloc(FX_ARGB, m_SrcPaletteNumber));
-    memcpy(m_pSrcPalette.get(), palette.data(),
+    memcpy(m_pSrcPalette.get(), palette->data(),
            m_SrcPaletteNumber * sizeof(FX_ARGB));
   } else {
     m_pSrcPalette.reset();