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);
}