Simplify CLZWDecoder::Decode() parameters.

Convert some in-out parameters into in-parameters. Add getters to
CLZWDecoder for retrieving values instead.

Change-Id: I644559403ca1cc1bcce146275d9b8a85fd598bdc
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/56471
Commit-Queue: Lei Zhang <thestig@chromium.org>
Reviewed-by: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fxcodec/flate/flatemodule.cpp b/core/fxcodec/flate/flatemodule.cpp
index fb8b78c..6f53540 100644
--- a/core/fxcodec/flate/flatemodule.cpp
+++ b/core/fxcodec/flate/flatemodule.cpp
@@ -110,7 +110,9 @@
  public:
   CLZWDecoder(pdfium::span<const uint8_t> src_span, bool early_change);
 
-  bool Decode(uint8_t* dest_buf, uint32_t* dest_size, uint32_t* src_size);
+  bool Decode(uint8_t* dest_buf, uint32_t dest_size, uint32_t src_size);
+  uint32_t GetSrcSize() const { return (src_bit_pos_ + 7) / 8; }
+  uint32_t GetDestSize() const { return dest_byte_pos_; }
 
  private:
   void AddCode(uint32_t prefix_code, uint8_t append_char);
@@ -164,12 +166,12 @@
 }
 
 bool CLZWDecoder::Decode(uint8_t* dest_buf,
-                         uint32_t* dest_size,
-                         uint32_t* src_size) {
+                         uint32_t dest_size,
+                         uint32_t src_size) {
   uint32_t old_code = 0xFFFFFFFF;
   uint8_t last_char = 0;
   while (1) {
-    if (src_bit_pos_ + code_len_ > *src_size * 8)
+    if (src_bit_pos_ + code_len_ > src_size * 8)
       break;
 
     int byte_pos = src_bit_pos_ / 8;
@@ -191,7 +193,7 @@
     src_bit_pos_ += code_len_;
 
     if (code < 256) {
-      if (dest_byte_pos_ == *dest_size)
+      if (dest_byte_pos_ == dest_size)
         return false;
 
       if (dest_buf)
@@ -224,7 +226,7 @@
     } else {
       DecodeString(code);
     }
-    if (dest_byte_pos_ + stack_len_ > *dest_size)
+    if (dest_byte_pos_ + stack_len_ > dest_size)
       return false;
 
     if (dest_buf) {
@@ -240,12 +242,7 @@
     AddCode(old_code, last_char);
     old_code = code;
   }
-  if (dest_byte_pos_ == 0)
-    return false;
-
-  *dest_size = dest_byte_pos_;
-  *src_size = (src_bit_pos_ + 7) / 8;
-  return true;
+  return dest_byte_pos_ != 0;
 }
 
 uint8_t PathPredictor(int a, int b, int c) {
@@ -792,12 +789,14 @@
     auto decoder = pdfium::MakeUnique<CLZWDecoder>(src_span, bEarlyChange);
     *dest_size = 0xFFFFFFFF;
     offset = src_span.size();
-    if (!decoder->Decode(nullptr, dest_size, &offset))
+    if (!decoder->Decode(nullptr, *dest_size, offset))
       return FX_INVALID_OFFSET;
 
+    offset = decoder->GetSrcSize();
+    *dest_size = decoder->GetDestSize();
     decoder = pdfium::MakeUnique<CLZWDecoder>(src_span, bEarlyChange);
     dest_buf->reset(FX_Alloc(uint8_t, *dest_size));
-    decoder->Decode(dest_buf->get(), dest_size, &offset);
+    decoder->Decode(dest_buf->get(), *dest_size, offset);
   } else {
     FlateUncompress(src_span, estimated_size, dest_buf, dest_size, &offset);
   }