Use FX_SAFE_FILESIZE and FX_SAFE_UINT32 in more places. Easier to write than pdfium::base::CheckedNumeric<T>. Change-Id: Ie699526214c723f32f5c72d809fa074a8a230e5d Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/65731 Reviewed-by: Tom Sepez <tsepez@chromium.org> Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/core/fpdfapi/edit/cpdf_creator.cpp b/core/fpdfapi/edit/cpdf_creator.cpp index 44eb089..65ddc45 100644 --- a/core/fpdfapi/edit/cpdf_creator.cpp +++ b/core/fpdfapi/edit/cpdf_creator.cpp
@@ -23,6 +23,7 @@ #include "core/fxcrt/fx_extension.h" #include "core/fxcrt/fx_memory_wrappers.h" #include "core/fxcrt/fx_random.h" +#include "core/fxcrt/fx_safe_types.h" #include "third_party/base/ptr_util.h" #include "third_party/base/stl_util.h" @@ -93,7 +94,7 @@ buffer += buf_size; } - pdfium::base::CheckedNumeric<FX_FILESIZE> safe_offset = offset_; + FX_SAFE_FILESIZE safe_offset = offset_; safe_offset += size; if (!safe_offset.IsValid()) return false;
diff --git a/core/fpdfapi/font/cpdf_cmapparser.cpp b/core/fpdfapi/font/cpdf_cmapparser.cpp index 7407a42..d1fe51c 100644 --- a/core/fpdfapi/font/cpdf_cmapparser.cpp +++ b/core/fpdfapi/font/cpdf_cmapparser.cpp
@@ -13,6 +13,7 @@ #include "core/fpdfapi/parser/cpdf_dictionary.h" #include "core/fpdfapi/parser/cpdf_simple_parser.h" #include "core/fxcrt/fx_extension.h" +#include "core/fxcrt/fx_safe_types.h" #include "core/fxge/fx_freetype.h" #include "third_party/base/logging.h" @@ -143,7 +144,7 @@ if (word.IsEmpty()) return 0; - pdfium::base::CheckedNumeric<uint32_t> num = 0; + FX_SAFE_UINT32 num = 0; if (word[0] == '<') { for (size_t i = 1; i < word.GetLength() && std::isxdigit(word[i]); ++i) { num = num * 16 + FXSYS_HexCharToInt(word[i]);
diff --git a/core/fpdfapi/page/cpdf_shadingpattern.cpp b/core/fpdfapi/page/cpdf_shadingpattern.cpp index 86f5106..69696ac 100644 --- a/core/fpdfapi/page/cpdf_shadingpattern.cpp +++ b/core/fpdfapi/page/cpdf_shadingpattern.cpp
@@ -15,6 +15,7 @@ #include "core/fpdfapi/parser/cpdf_document.h" #include "core/fpdfapi/parser/cpdf_object.h" #include "core/fpdfapi/parser/cpdf_stream.h" +#include "core/fxcrt/fx_safe_types.h" namespace { @@ -151,7 +152,7 @@ if (m_pFunctions.size() != nExpectedNumFunctions) return false; - pdfium::base::CheckedNumeric<uint32_t> nTotalOutputs = 0; + FX_SAFE_UINT32 nTotalOutputs = 0; for (const auto& function : m_pFunctions) { if (!function) return false;
diff --git a/core/fxcodec/gif/cfx_lzwdecompressor.cpp b/core/fxcodec/gif/cfx_lzwdecompressor.cpp index 14e34f5..12e0d89 100644 --- a/core/fxcodec/gif/cfx_lzwdecompressor.cpp +++ b/core/fxcodec/gif/cfx_lzwdecompressor.cpp
@@ -11,6 +11,7 @@ #include <memory> #include <utility> +#include "core/fxcrt/fx_safe_types.h" #include "third_party/base/numerics/safe_math.h" std::unique_ptr<CFX_LZWDecompressor> CFX_LZWDecompressor::Create( @@ -73,7 +74,7 @@ if (bits_left_ > 31) return CFX_GifDecodeStatus::Error; - pdfium::base::CheckedNumeric<uint32_t> safe_code = *next_in_++; + FX_SAFE_UINT32 safe_code = *next_in_++; safe_code <<= bits_left_; safe_code |= code_store_; if (!safe_code.IsValid())
diff --git a/core/fxcrt/cfx_seekablestreamproxy.cpp b/core/fxcrt/cfx_seekablestreamproxy.cpp index 3b65c14..67b304f 100644 --- a/core/fxcrt/cfx_seekablestreamproxy.cpp +++ b/core/fxcrt/cfx_seekablestreamproxy.cpp
@@ -20,6 +20,7 @@ #include "core/fxcrt/fx_codepage.h" #include "core/fxcrt/fx_extension.h" #include "core/fxcrt/fx_memory_wrappers.h" +#include "core/fxcrt/fx_safe_types.h" #include "third_party/base/stl_util.h" namespace { @@ -163,7 +164,7 @@ m_iPosition = iOffset; break; case From::Current: { - pdfium::base::CheckedNumeric<FX_FILESIZE> new_pos = m_iPosition; + FX_SAFE_FILESIZE new_pos = m_iPosition; new_pos += iOffset; m_iPosition = new_pos.ValueOrDefault(std::numeric_limits<FX_FILESIZE>::max()); @@ -191,7 +192,7 @@ if (!m_pStream->ReadBlockAtOffset(pBuffer, m_iPosition, iBufferSize)) return 0; - pdfium::base::CheckedNumeric<FX_FILESIZE> new_pos = m_iPosition; + FX_SAFE_FILESIZE new_pos = m_iPosition; new_pos += iBufferSize; m_iPosition = new_pos.ValueOrDefault(m_iPosition); return new_pos.IsValid() ? iBufferSize : 0;
diff --git a/core/fxcrt/fx_number.cpp b/core/fxcrt/fx_number.cpp index 0a565be..9935451 100644 --- a/core/fxcrt/fx_number.cpp +++ b/core/fxcrt/fx_number.cpp
@@ -9,6 +9,7 @@ #include <limits> #include "core/fxcrt/fx_extension.h" +#include "core/fxcrt/fx_safe_types.h" #include "core/fxcrt/fx_string.h" FX_Number::FX_Number() @@ -37,7 +38,7 @@ // actually an unsigned value. We use a uint32_t so we can deal with the // unsigned and then check for overflow if the user actually signed the value. // The Permissions flag is listed in Table 3.20 PDF 1.7 spec. - pdfium::base::CheckedNumeric<uint32_t> unsigned_val = 0; + FX_SAFE_UINT32 unsigned_val = 0; bool bNegative = false; size_t cc = 0; if (strc[0] == '+') {