Avoid more future unsafe buffer usage in StringDataTemplate.
Use bounds-checked copies and indexing.
Change-Id: I93952c294733bf5ae883ceeb0bb540b9f87a12c6
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/116890
Reviewed-by: Lei Zhang <thestig@chromium.org>
Reviewed-by: Thomas Sepez <tsepez@google.com>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fxcrt/string_data_template.cpp b/core/fxcrt/string_data_template.cpp
index 1f0046f..30ca0a6 100644
--- a/core/fxcrt/string_data_template.cpp
+++ b/core/fxcrt/string_data_template.cpp
@@ -12,9 +12,9 @@
#include "core/fxcrt/check.h"
#include "core/fxcrt/check_op.h"
-#include "core/fxcrt/fx_memcpy_wrappers.h"
#include "core/fxcrt/fx_memory.h"
#include "core/fxcrt/fx_safe_types.h"
+#include "core/fxcrt/span_util.h"
namespace fxcrt {
@@ -63,32 +63,30 @@
template <typename CharType>
void StringDataTemplate<CharType>::CopyContents(
const StringDataTemplate& other) {
- DCHECK(other.m_nDataLength <= m_nAllocLength);
- memcpy(m_String, other.m_String,
- (other.m_nDataLength + 1) * sizeof(CharType));
+ fxcrt::spancpy(capacity_span(),
+ other.capacity_span().first(other.m_nDataLength + 1));
}
template <typename CharType>
void StringDataTemplate<CharType>::CopyContents(
pdfium::span<const CharType> str) {
- FXSYS_memcpy(m_String, str.data(), str.size_bytes());
- m_String[str.size()] = 0;
+ fxcrt::spancpy(capacity_span(), str);
+ capacity_span()[str.size()] = 0;
}
template <typename CharType>
void StringDataTemplate<CharType>::CopyContentsAt(
size_t offset,
pdfium::span<const CharType> str) {
- FXSYS_memcpy(m_String + offset, str.data(), str.size_bytes());
- m_String[offset + str.size()] = 0;
+ fxcrt::spancpy(capacity_span().subspan(offset), str);
+ capacity_span()[offset + str.size()] = 0;
}
template <typename CharType>
StringDataTemplate<CharType>::StringDataTemplate(size_t dataLen,
size_t allocLen)
: m_nDataLength(dataLen), m_nAllocLength(allocLen) {
- DCHECK_LE(dataLen, allocLen);
- m_String[dataLen] = 0;
+ capacity_span()[dataLen] = 0;
}
// Instantiate.