Use std::vector for BasicModule::m_pScanline.
No need to allocate it manually, since we always expect it to be
pre-zeroed and we don't hand it off anywhere.
Change-Id: I7203badcd82413bcf4cb807c6ea02ac37514970b
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/82630
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fxcodec/basic/basicmodule.cpp b/core/fxcodec/basic/basicmodule.cpp
index 482eadc..b3abc99 100644
--- a/core/fxcodec/basic/basicmodule.cpp
+++ b/core/fxcodec/basic/basicmodule.cpp
@@ -6,6 +6,7 @@
#include <algorithm>
#include <utility>
+#include <vector>
#include "core/fxcodec/scanlinedecoder.h"
#include "core/fxcrt/fx_safe_types.h"
@@ -36,7 +37,7 @@
void GetNextOperator();
void UpdateOperator(uint8_t used_bytes);
- std::unique_ptr<uint8_t, FxFreeDeleter> m_pScanline;
+ std::vector<uint8_t, FxAllocAllocator<uint8_t>> m_Scanline;
pdfium::span<const uint8_t> m_SrcBuf;
size_t m_dwLineBytes = 0;
size_t m_SrcOffset = 0;
@@ -101,12 +102,12 @@
m_Pitch = pitch.ValueOrDie();
// Overflow should already have been checked before this is called.
m_dwLineBytes = (static_cast<uint32_t>(width) * nComps * bpc + 7) / 8;
- m_pScanline.reset(FX_Alloc(uint8_t, m_Pitch));
+ m_Scanline.resize(m_Pitch);
return CheckDestSize();
}
bool RLScanlineDecoder::v_Rewind() {
- memset(m_pScanline.get(), 0, m_Pitch);
+ memset(m_Scanline.data(), 0, m_Pitch);
m_SrcOffset = 0;
m_bEOD = false;
m_Operator = 0;
@@ -119,7 +120,7 @@
} else if (m_bEOD) {
return nullptr;
}
- memset(m_pScanline.get(), 0, m_Pitch);
+ memset(m_Scanline.data(), 0, m_Pitch);
uint32_t col_pos = 0;
bool eol = false;
while (m_SrcOffset < m_SrcBuf.size() && !eol) {
@@ -134,7 +135,7 @@
m_bEOD = true;
}
auto copy_span = m_SrcBuf.subspan(m_SrcOffset, copy_len);
- memcpy(m_pScanline.get() + col_pos, copy_span.data(), copy_span.size());
+ memcpy(m_Scanline.data() + col_pos, copy_span.data(), copy_span.size());
col_pos += copy_len;
UpdateOperator((uint8_t)copy_len);
} else if (m_Operator > 128) {
@@ -147,7 +148,7 @@
duplicate_len = m_dwLineBytes - col_pos;
eol = true;
}
- memset(m_pScanline.get() + col_pos, fill, duplicate_len);
+ memset(m_Scanline.data() + col_pos, fill, duplicate_len);
col_pos += duplicate_len;
UpdateOperator((uint8_t)duplicate_len);
} else {
@@ -155,7 +156,7 @@
break;
}
}
- return m_pScanline.get();
+ return m_Scanline.data();
}
void RLScanlineDecoder::GetNextOperator() {