diff options
author | Lei Zhang <thestig@chromium.org> | 2018-10-16 05:21:13 +0000 |
---|---|---|
committer | Chromium commit bot <commit-bot@chromium.org> | 2018-10-16 05:21:13 +0000 |
commit | 2e2acbdc523735fdbbf69b1f9fee9a24e4303045 (patch) | |
tree | 8faa4479c0e73771fc816791a97aa4c83f8769a1 /core/fxcodec/codec/fx_codec.cpp | |
parent | 6ea4d08b905de5fab7dc64f35b0abf745a1db3f3 (diff) | |
download | pdfium-2e2acbdc523735fdbbf69b1f9fee9a24e4303045.tar.xz |
Make {A85,RunLength}Encode()'s buffer out parameter a unique_ptr.
Change-Id: I3f06ea7ed39c8a8fff57e07f14ff6c21bedbc028
Reviewed-on: https://pdfium-review.googlesource.com/c/43998
Commit-Queue: Lei Zhang <thestig@chromium.org>
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Diffstat (limited to 'core/fxcodec/codec/fx_codec.cpp')
-rw-r--r-- | core/fxcodec/codec/fx_codec.cpp | 35 |
1 files changed, 19 insertions, 16 deletions
diff --git a/core/fxcodec/codec/fx_codec.cpp b/core/fxcodec/codec/fx_codec.cpp index d38f10aadd..f2c8e18843 100644 --- a/core/fxcodec/codec/fx_codec.cpp +++ b/core/fxcodec/codec/fx_codec.cpp @@ -1357,20 +1357,22 @@ CCodec_ModuleMgr::CCodec_ModuleMgr() CCodec_ModuleMgr::~CCodec_ModuleMgr() {} -bool CCodec_BasicModule::RunLengthEncode(pdfium::span<const uint8_t> src_span, - uint8_t** dest_buf, - uint32_t* dest_size) { +bool CCodec_BasicModule::RunLengthEncode( + pdfium::span<const uint8_t> src_span, + std::unique_ptr<uint8_t, FxFreeDeleter>* dest_buf, + uint32_t* dest_size) { // Check inputs if (src_span.empty() || !dest_buf || !dest_size) return false; // Edge case if (src_span.size() == 1) { - *dest_buf = FX_Alloc(uint8_t, 3); - (*dest_buf)[0] = 0; - (*dest_buf)[1] = src_span[0]; - (*dest_buf)[2] = 128; *dest_size = 3; + dest_buf->reset(FX_Alloc(uint8_t, *dest_size)); + auto dest_buf_span = pdfium::make_span(dest_buf->get(), *dest_size); + dest_buf_span[0] = 0; + dest_buf_span[1] = src_span[0]; + dest_buf_span[2] = 128; return true; } @@ -1382,10 +1384,10 @@ bool CCodec_BasicModule::RunLengthEncode(pdfium::span<const uint8_t> src_span, estimated_size /= 3; estimated_size *= 4; estimated_size += 1; - *dest_buf = FX_Alloc(uint8_t, estimated_size.ValueOrDie()); + dest_buf->reset(FX_Alloc(uint8_t, estimated_size.ValueOrDie())); // Set up pointers. - uint8_t* out = *dest_buf; + uint8_t* out = dest_buf->get(); uint32_t run_start = 0; uint32_t run_end = 1; uint8_t x = src_span[run_start]; @@ -1436,13 +1438,14 @@ bool CCodec_BasicModule::RunLengthEncode(pdfium::span<const uint8_t> src_span, out += 2; } *out = 128; - *dest_size = out + 1 - *dest_buf; + *dest_size = out + 1 - dest_buf->get(); return true; } -bool CCodec_BasicModule::A85Encode(pdfium::span<const uint8_t> src_span, - uint8_t** dest_buf, - uint32_t* dest_size) { +bool CCodec_BasicModule::A85Encode( + pdfium::span<const uint8_t> src_span, + std::unique_ptr<uint8_t, FxFreeDeleter>* dest_buf, + uint32_t* dest_size) { // Check inputs. if (!dest_buf || !dest_size) return false; @@ -1461,10 +1464,10 @@ bool CCodec_BasicModule::A85Encode(pdfium::span<const uint8_t> src_span, estimated_size += 4; estimated_size += src_span.size() / 30; estimated_size += 2; - *dest_buf = FX_Alloc(uint8_t, estimated_size.ValueOrDie()); + dest_buf->reset(FX_Alloc(uint8_t, estimated_size.ValueOrDie())); // Set up pointers. - uint8_t* out = *dest_buf; + uint8_t* out = dest_buf->get(); uint32_t pos = 0; uint32_t line_length = 0; while (src_span.size() >= 4 && pos < src_span.size() - 3) { @@ -1511,7 +1514,7 @@ bool CCodec_BasicModule::A85Encode(pdfium::span<const uint8_t> src_span, out[0] = '~'; out[1] = '>'; out += 2; - *dest_size = out - *dest_buf; + *dest_size = out - dest_buf->get(); return true; } |