From d458471e094f1c9ae3407eb2c6248278ae37cac3 Mon Sep 17 00:00:00 2001 From: Sergey Bugaev Date: Wed, 24 Apr 2024 17:02:51 +0300 Subject: [PATCH] LibPDF: Convert byte offsets to u64 This fixes a build failure on 32-bit. Suggested-by: Nico Weber --- Userland/Libraries/LibPDF/DocumentParser.cpp | 4 ++-- Userland/Libraries/LibPDF/Function.cpp | 2 +- Userland/Libraries/LibPDF/XRefTable.h | 10 +++++----- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/Userland/Libraries/LibPDF/DocumentParser.cpp b/Userland/Libraries/LibPDF/DocumentParser.cpp index 4ffce9ba506..e3ba3e1a515 100644 --- a/Userland/Libraries/LibPDF/DocumentParser.cpp +++ b/Userland/Libraries/LibPDF/DocumentParser.cpp @@ -477,7 +477,7 @@ PDFErrorOr> DocumentParser::parse_xref_stream() Vector entries; for (int i = 0; i < count; i++) { - Array fields; + Array fields; for (size_t field_index = 0; field_index < 3; ++field_index) { if (!field_sizes->at(field_index).has_u32()) return error("Malformed xref stream"); @@ -562,7 +562,7 @@ PDFErrorOr> DocumentParser::parse_xref_table() m_reader.move_by(2); } - auto offset = strtol(offset_string.characters(), nullptr, 10); + u64 offset = strtoll(offset_string.characters(), nullptr, 10); auto generation = strtol(generation_string.characters(), nullptr, 10); entries.append({ offset, static_cast(generation), letter == 'n' }); diff --git a/Userland/Libraries/LibPDF/Function.cpp b/Userland/Libraries/LibPDF/Function.cpp index 6971b3c1bad..502437a2c28 100644 --- a/Userland/Libraries/LibPDF/Function.cpp +++ b/Userland/Libraries/LibPDF/Function.cpp @@ -156,7 +156,7 @@ SampledFunction::create(Document* document, Vector domain, Optionalbytes().size() < ceil_div(total_bits, 8ull)) + if (stream->bytes().size() < ceil_div(total_bits, static_cast(8))) return Error { Error::Type::MalformedPDF, "Function type 0 stream too small" }; auto function = adopt_ref(*new SampledFunction(stream)); diff --git a/Userland/Libraries/LibPDF/XRefTable.h b/Userland/Libraries/LibPDF/XRefTable.h index e7431f3bfa2..f3a613d0078 100644 --- a/Userland/Libraries/LibPDF/XRefTable.h +++ b/Userland/Libraries/LibPDF/XRefTable.h @@ -14,10 +14,10 @@ namespace PDF { -constexpr long invalid_byte_offset = NumericLimits::max(); +constexpr u64 invalid_byte_offset = NumericLimits::max(); struct XRefEntry { - long byte_offset { invalid_byte_offset }; + u64 byte_offset { invalid_byte_offset }; u16 generation_number { 0 }; bool in_use { false }; bool compressed { false }; @@ -73,16 +73,16 @@ public: [[nodiscard]] ALWAYS_INLINE bool has_object(size_t index) const { - return index < m_entries.size() && m_entries[index].byte_offset != -1; + return index < m_entries.size() && m_entries[index].byte_offset != invalid_byte_offset; } - [[nodiscard]] ALWAYS_INLINE long byte_offset_for_object(size_t index) const + [[nodiscard]] ALWAYS_INLINE u64 byte_offset_for_object(size_t index) const { VERIFY(has_object(index)); return m_entries[index].byte_offset; } - [[nodiscard]] ALWAYS_INLINE long object_stream_for_object(size_t index) const + [[nodiscard]] ALWAYS_INLINE u64 object_stream_for_object(size_t index) const { return byte_offset_for_object(index); }