From 30debd26350c8c786f8fd7159134eab2d93d2b4a Mon Sep 17 00:00:00 2001 From: Kevin Backhouse Date: Wed, 27 Jul 2022 17:26:18 -0400 Subject: [PATCH] Use size_t for the offset. --- src/tiffcomposite_int.cpp | 97 ++++++++++++++++++++------------------- src/tiffcomposite_int.hpp | 52 ++++++++++----------- 2 files changed, 76 insertions(+), 73 deletions(-) diff --git a/src/tiffcomposite_int.cpp b/src/tiffcomposite_int.cpp index 2bed3790..f0a5e678 100644 --- a/src/tiffcomposite_int.cpp +++ b/src/tiffcomposite_int.cpp @@ -5,6 +5,7 @@ #include "enforce.hpp" #include "error.hpp" #include "makernote_int.hpp" +#include "safe_op.hpp" #include "sonymn_int.hpp" #include "tiffcomposite_int.hpp" #include "tiffimage_int.hpp" @@ -49,8 +50,8 @@ int IoWrapper::putb(byte data) { return io_.putb(data); } -void IoWrapper::setTarget(int id, int64_t target) { - if (target < 0 || target > std::numeric_limits::max()) { +void IoWrapper::setTarget(int id, size_t target) { + if (target > std::numeric_limits::max()) { throw Error(ErrorCode::kerOffsetOutOfRange); } if (pow_) @@ -270,24 +271,24 @@ void TiffDataEntry::setStrips(const Value* pSize, const byte* pData, size_t size #endif return; } - uint32_t size = 0; + size_t size = 0; for (size_t i = 0; i < pSize->count(); ++i) { - size += pSize->toUint32(i); + size = Safe::add(size, pSize->toUint32(i)); } - auto offset = pValue()->toUint32(0); - // Todo: Remove limitation of JPEG writer: strips must be contiguous - // Until then we check: last offset + last size - first offset == size? - if (pValue()->toUint32(pValue()->count() - 1) + pSize->toUint32(pSize->count() - 1) - offset != size) { -#ifndef SUPPRESS_WARNINGS - EXV_WARNING << "Directory " << groupName(group()) << ", entry 0x" << std::setw(4) << std::setfill('0') << std::hex - << tag() << ": Data area is not contiguous, ignoring it.\n"; -#endif - return; - } - if (offset > sizeData || size > sizeData || baseOffset + offset > sizeData - size) { + const size_t offset = pValue()->toUint32(0); + if (size > sizeData || offset > sizeData - size || baseOffset > sizeData - size - offset) { #ifndef SUPPRESS_WARNINGS EXV_WARNING << "Directory " << groupName(group()) << ", entry 0x" << std::setw(4) << std::setfill('0') << std::hex << tag() << ": Data area exceeds data buffer, ignoring it.\n"; +#endif + return; + } + // Todo: Remove limitation of JPEG writer: strips must be contiguous + // Until then we check: last offset + last size - first offset == size? + if (pValue()->toUint32(pValue()->count() - 1) + pSize->toUint32(pSize->count() - 1) != size + offset) { +#ifndef SUPPRESS_WARNINGS + EXV_WARNING << "Directory " << groupName(group()) << ", entry 0x" << std::setw(4) << std::setfill('0') << std::hex + << tag() << ": Data area is not contiguous, ignoring it.\n"; #endif return; } @@ -313,11 +314,11 @@ void TiffImageEntry::setStrips(const Value* pSize, const byte* pData, size_t siz return; } for (size_t i = 0; i < pValue()->count(); ++i) { - const auto offset = pValue()->toUint32(i); + const size_t offset = pValue()->toUint32(i); const byte* pStrip = pData + baseOffset + offset; - const auto size = pSize->toUint32(i); + const size_t size = pSize->toUint32(i); - if (offset > sizeData || size > sizeData || baseOffset + offset > sizeData - size) { + if (size > sizeData || offset > sizeData - size || baseOffset > sizeData - size - offset) { #ifndef SUPPRESS_WARNINGS EXV_WARNING << "Directory " << groupName(group()) << ", entry 0x" << std::setw(4) << std::setfill('0') << std::hex << tag() << ": Strip " << std::dec << i << " is outside of the data area; ignored.\n"; @@ -817,12 +818,12 @@ size_t TiffBinaryElement::doCount() const { return elDef_.count_; } -uint32_t TiffComponent::write(IoWrapper& ioWrapper, ByteOrder byteOrder, int64_t offset, uint32_t valueIdx, +uint32_t TiffComponent::write(IoWrapper& ioWrapper, ByteOrder byteOrder, size_t offset, uint32_t valueIdx, uint32_t dataIdx, uint32_t& imageIdx) { return doWrite(ioWrapper, byteOrder, offset, valueIdx, dataIdx, imageIdx); } // TiffComponent::write -uint32_t TiffDirectory::doWrite(IoWrapper& ioWrapper, ByteOrder byteOrder, int64_t offset, uint32_t valueIdx, +uint32_t TiffDirectory::doWrite(IoWrapper& ioWrapper, ByteOrder byteOrder, size_t offset, uint32_t valueIdx, uint32_t dataIdx, uint32_t& imageIdx) { bool isRootDir = (imageIdx == static_cast(-1)); @@ -946,7 +947,7 @@ uint32_t TiffDirectory::doWrite(IoWrapper& ioWrapper, ByteOrder byteOrder, int64 return static_cast(idx); } -uint32_t TiffDirectory::writeDirEntry(IoWrapper& ioWrapper, ByteOrder byteOrder, int64_t offset, +uint32_t TiffDirectory::writeDirEntry(IoWrapper& ioWrapper, ByteOrder byteOrder, size_t offset, TiffComponent* pTiffComponent, uint32_t valueIdx, uint32_t dataIdx, uint32_t& imageIdx) { auto pDirEntry = dynamic_cast(pTiffComponent); @@ -956,8 +957,8 @@ uint32_t TiffDirectory::writeDirEntry(IoWrapper& ioWrapper, ByteOrder byteOrder, ul2Data(buf + 4, static_cast(pDirEntry->count()), byteOrder); ioWrapper.write(buf, 8); if (pDirEntry->size() > 4) { - pDirEntry->setOffset(offset + static_cast(valueIdx)); - l2Data(buf, static_cast(pDirEntry->offset()), byteOrder); + pDirEntry->setOffset(Safe::add(offset, valueIdx)); + l2Data(buf, pDirEntry->offset(), byteOrder); ioWrapper.write(buf, 4); } else { const uint32_t len = pDirEntry->write(ioWrapper, byteOrder, offset, valueIdx, dataIdx, imageIdx); @@ -974,7 +975,7 @@ uint32_t TiffDirectory::writeDirEntry(IoWrapper& ioWrapper, ByteOrder byteOrder, return 12; } // TiffDirectory::writeDirEntry -uint32_t TiffEntryBase::doWrite(IoWrapper& ioWrapper, ByteOrder byteOrder, int64_t /*offset*/, uint32_t /*valueIdx*/, +uint32_t TiffEntryBase::doWrite(IoWrapper& ioWrapper, ByteOrder byteOrder, size_t /*offset*/, uint32_t /*valueIdx*/, uint32_t /*dataIdx*/, uint32_t& /*imageIdx*/) { if (!pValue_ || pValue_->size() == 0) return 0; @@ -985,14 +986,14 @@ uint32_t TiffEntryBase::doWrite(IoWrapper& ioWrapper, ByteOrder byteOrder, int64 return static_cast(buf.size()); } // TiffEntryBase::doWrite -uint32_t TiffEntryBase::writeOffset(byte* buf, int64_t offset, TiffType tiffType, ByteOrder byteOrder) { +uint32_t TiffEntryBase::writeOffset(byte* buf, size_t offset, TiffType tiffType, ByteOrder byteOrder) { uint32_t rc = 0; switch (tiffType) { case ttUnsignedShort: case ttSignedShort: - if (static_cast(offset) > 0xffff) + if (offset > std::numeric_limits::max()) throw Error(ErrorCode::kerOffsetOutOfRange); - rc = s2Data(buf, static_cast(offset), byteOrder); + rc = us2Data(buf, static_cast(offset), byteOrder); break; case ttUnsignedLong: case ttSignedLong: @@ -1005,23 +1006,25 @@ uint32_t TiffEntryBase::writeOffset(byte* buf, int64_t offset, TiffType tiffType return rc; } // TiffEntryBase::writeOffset -uint32_t TiffDataEntry::doWrite(IoWrapper& ioWrapper, ByteOrder byteOrder, int64_t offset, uint32_t /*valueIdx*/, +uint32_t TiffDataEntry::doWrite(IoWrapper& ioWrapper, ByteOrder byteOrder, size_t offset, uint32_t /*valueIdx*/, uint32_t dataIdx, uint32_t& /*imageIdx*/) { if (!pValue() || pValue()->count() == 0) return 0; DataBuf buf(pValue()->size()); uint32_t idx = 0; - const auto prevOffset = pValue()->toInt64(0); - for (uint32_t i = 0; i < count(); ++i) { - const int64_t newDataIdx = pValue()->toInt64(i) - prevOffset + static_cast(dataIdx); - idx += writeOffset(buf.data(idx), offset + newDataIdx, tiffType(), byteOrder); + const size_t prevOffset = pValue()->toUint32(0); + for (size_t i = 0; i < count(); ++i) { + const size_t iOffset = pValue()->toUint32(i); + enforce(prevOffset <= iOffset, ErrorCode::kerOffsetOutOfRange); + const auto newDataIdx = Safe::add(iOffset - prevOffset, dataIdx); + idx += writeOffset(buf.data(idx), Safe::add(offset, newDataIdx), tiffType(), byteOrder); } ioWrapper.write(buf.c_data(), buf.size()); return static_cast(buf.size()); } -uint32_t TiffImageEntry::doWrite(IoWrapper& ioWrapper, ByteOrder byteOrder, int64_t offset, uint32_t /*valueIdx*/, +uint32_t TiffImageEntry::doWrite(IoWrapper& ioWrapper, ByteOrder byteOrder, size_t offset, uint32_t /*valueIdx*/, uint32_t dataIdx, uint32_t& imageIdx) { uint32_t o2 = imageIdx; // For makernotes, write TIFF image data to the data area @@ -1046,7 +1049,7 @@ uint32_t TiffImageEntry::doWrite(IoWrapper& ioWrapper, ByteOrder byteOrder, int6 return static_cast(buf.size()); } // TiffImageEntry::doWrite -uint32_t TiffSubIfd::doWrite(IoWrapper& ioWrapper, ByteOrder byteOrder, int64_t offset, uint32_t /*valueIdx*/, +uint32_t TiffSubIfd::doWrite(IoWrapper& ioWrapper, ByteOrder byteOrder, size_t offset, uint32_t /*valueIdx*/, uint32_t dataIdx, uint32_t& /*imageIdx*/) { DataBuf buf(ifds_.size() * 4); uint32_t idx = 0; @@ -1060,7 +1063,7 @@ uint32_t TiffSubIfd::doWrite(IoWrapper& ioWrapper, ByteOrder byteOrder, int64_t return static_cast(buf.size()); } // TiffSubIfd::doWrite -uint32_t TiffMnEntry::doWrite(IoWrapper& ioWrapper, ByteOrder byteOrder, int64_t offset, uint32_t valueIdx, +uint32_t TiffMnEntry::doWrite(IoWrapper& ioWrapper, ByteOrder byteOrder, size_t offset, uint32_t valueIdx, uint32_t dataIdx, uint32_t& imageIdx) { if (!mn_) { return TiffEntryBase::doWrite(ioWrapper, byteOrder, offset, valueIdx, dataIdx, imageIdx); @@ -1069,7 +1072,7 @@ uint32_t TiffMnEntry::doWrite(IoWrapper& ioWrapper, ByteOrder byteOrder, int64_t imageIdx); } // TiffMnEntry::doWrite -uint32_t TiffIfdMakernote::doWrite(IoWrapper& ioWrapper, ByteOrder byteOrder, int64_t offset, uint32_t /*valueIdx*/, +uint32_t TiffIfdMakernote::doWrite(IoWrapper& ioWrapper, ByteOrder byteOrder, size_t offset, uint32_t /*valueIdx*/, uint32_t /*dataIdx*/, uint32_t& imageIdx) { mnOffset_ = static_cast(offset); setImageByteOrder(byteOrder); @@ -1079,7 +1082,7 @@ uint32_t TiffIfdMakernote::doWrite(IoWrapper& ioWrapper, ByteOrder byteOrder, in return len; } // TiffIfdMakernote::doWrite -uint32_t TiffBinaryArray::doWrite(IoWrapper& ioWrapper, ByteOrder byteOrder, int64_t offset, uint32_t valueIdx, +uint32_t TiffBinaryArray::doWrite(IoWrapper& ioWrapper, ByteOrder byteOrder, size_t offset, uint32_t valueIdx, uint32_t dataIdx, uint32_t& imageIdx) { if (!cfg() || !decoded()) return TiffEntryBase::doWrite(ioWrapper, byteOrder, offset, valueIdx, dataIdx, imageIdx); @@ -1138,8 +1141,8 @@ uint32_t TiffBinaryArray::doWrite(IoWrapper& ioWrapper, ByteOrder byteOrder, int return idx; } // TiffBinaryArray::doWrite -uint32_t TiffBinaryElement::doWrite(IoWrapper& ioWrapper, ByteOrder byteOrder, int64_t /*offset*/, - uint32_t /*valueIdx*/, uint32_t /*dataIdx*/, uint32_t& /*imageIdx*/) { +uint32_t TiffBinaryElement::doWrite(IoWrapper& ioWrapper, ByteOrder byteOrder, size_t /*offset*/, uint32_t /*valueIdx*/, + uint32_t /*dataIdx*/, uint32_t& /*imageIdx*/) { auto pv = pValue(); if (!pv || pv->count() == 0) return 0; @@ -1149,12 +1152,12 @@ uint32_t TiffBinaryElement::doWrite(IoWrapper& ioWrapper, ByteOrder byteOrder, i return static_cast(buf.size()); } // TiffBinaryElement::doWrite -uint32_t TiffComponent::writeData(IoWrapper& ioWrapper, ByteOrder byteOrder, int64_t offset, uint32_t dataIdx, +uint32_t TiffComponent::writeData(IoWrapper& ioWrapper, ByteOrder byteOrder, size_t offset, uint32_t dataIdx, uint32_t& imageIdx) const { return doWriteData(ioWrapper, byteOrder, offset, dataIdx, imageIdx); } // TiffComponent::writeData -uint32_t TiffDirectory::doWriteData(IoWrapper& ioWrapper, ByteOrder byteOrder, int64_t offset, uint32_t dataIdx, +uint32_t TiffDirectory::doWriteData(IoWrapper& ioWrapper, ByteOrder byteOrder, size_t offset, uint32_t dataIdx, uint32_t& imageIdx) const { uint32_t len = 0; for (auto&& component : components_) { @@ -1163,13 +1166,13 @@ uint32_t TiffDirectory::doWriteData(IoWrapper& ioWrapper, ByteOrder byteOrder, i return len; } // TiffDirectory::doWriteData -uint32_t TiffEntryBase::doWriteData(IoWrapper& /*ioWrapper*/, ByteOrder /*byteOrder*/, int64_t /*offset*/, +uint32_t TiffEntryBase::doWriteData(IoWrapper& /*ioWrapper*/, ByteOrder /*byteOrder*/, size_t /*offset*/, uint32_t /*dataIdx*/, uint32_t& /*imageIdx*/) const { return 0; } // TiffEntryBase::doWriteData -uint32_t TiffImageEntry::doWriteData(IoWrapper& ioWrapper, ByteOrder byteOrder, int64_t /*offset*/, - uint32_t /*dataIdx*/, uint32_t& /*imageIdx*/) const { +uint32_t TiffImageEntry::doWriteData(IoWrapper& ioWrapper, ByteOrder byteOrder, size_t /*offset*/, uint32_t /*dataIdx*/, + uint32_t& /*imageIdx*/) const { uint32_t len = 0; // For makernotes, write TIFF image data to the data area if (group() > IfdId::mnId) { // Todo: FIX THIS HACK!!! @@ -1178,7 +1181,7 @@ uint32_t TiffImageEntry::doWriteData(IoWrapper& ioWrapper, ByteOrder byteOrder, return len; } // TiffImageEntry::doWriteData -uint32_t TiffDataEntry::doWriteData(IoWrapper& ioWrapper, ByteOrder /*byteOrder*/, int64_t /*offset*/, +uint32_t TiffDataEntry::doWriteData(IoWrapper& ioWrapper, ByteOrder /*byteOrder*/, size_t /*offset*/, uint32_t /*dataIdx*/, uint32_t& /*imageIdx*/) const { if (!pValue()) return 0; @@ -1194,7 +1197,7 @@ uint32_t TiffDataEntry::doWriteData(IoWrapper& ioWrapper, ByteOrder /*byteOrder* return static_cast(buf.size() + align); } // TiffDataEntry::doWriteData -uint32_t TiffSubIfd::doWriteData(IoWrapper& ioWrapper, ByteOrder byteOrder, int64_t offset, uint32_t dataIdx, +uint32_t TiffSubIfd::doWriteData(IoWrapper& ioWrapper, ByteOrder byteOrder, size_t offset, uint32_t dataIdx, uint32_t& imageIdx) const { uint32_t len = 0; for (auto&& ifd : ifds_) { @@ -1209,7 +1212,7 @@ uint32_t TiffSubIfd::doWriteData(IoWrapper& ioWrapper, ByteOrder byteOrder, int6 return len + align; } // TiffSubIfd::doWriteData -uint32_t TiffIfdMakernote::doWriteData(IoWrapper& /*ioWrapper*/, ByteOrder /*byteOrder*/, int64_t /*offset*/, +uint32_t TiffIfdMakernote::doWriteData(IoWrapper& /*ioWrapper*/, ByteOrder /*byteOrder*/, size_t /*offset*/, uint32_t /*dataIdx*/, uint32_t& /*imageIdx*/) const { return 0; } diff --git a/src/tiffcomposite_int.hpp b/src/tiffcomposite_int.hpp index 0f8a04a2..1a7002c1 100644 --- a/src/tiffcomposite_int.hpp +++ b/src/tiffcomposite_int.hpp @@ -129,7 +129,7 @@ class IoWrapper { */ int putb(byte data); //! Wrapper for OffsetWriter::setTarget(), using an int instead of the enum to reduce include deps - void setTarget(int id, int64_t target); + void setTarget(int id, size_t target); //@} private: @@ -221,7 +221,7 @@ class TiffComponent { nested components. @throw Error If the component cannot be written. */ - uint32_t write(IoWrapper& ioWrapper, ByteOrder byteOrder, int64_t offset, uint32_t valueIdx, uint32_t dataIdx, + uint32_t write(IoWrapper& ioWrapper, ByteOrder byteOrder, size_t offset, uint32_t valueIdx, uint32_t dataIdx, uint32_t& imageIdx); //@} @@ -250,7 +250,7 @@ class TiffComponent { Return the number of bytes written. Components derived from TiffEntryBase implement this method if needed. */ - uint32_t writeData(IoWrapper& ioWrapper, ByteOrder byteOrder, int64_t offset, uint32_t dataIdx, + uint32_t writeData(IoWrapper& ioWrapper, ByteOrder byteOrder, size_t offset, uint32_t dataIdx, uint32_t& imageIdx) const; /*! @brief Write the image data of this component to a binary image. @@ -302,7 +302,7 @@ class TiffComponent { //! Implements accept(). virtual void doAccept(TiffVisitor& visitor) = 0; //! Implements write(). - virtual uint32_t doWrite(IoWrapper& ioWrapper, ByteOrder byteOrder, int64_t offset, uint32_t valueIdx, + virtual uint32_t doWrite(IoWrapper& ioWrapper, ByteOrder byteOrder, size_t offset, uint32_t valueIdx, uint32_t dataIdx, uint32_t& imageIdx) = 0; //@} @@ -311,7 +311,7 @@ class TiffComponent { //! Internal virtual copy constructor, implements clone(). [[nodiscard]] virtual TiffComponent* doClone() const = 0; //! Implements writeData(). - virtual uint32_t doWriteData(IoWrapper& ioWrapper, ByteOrder byteOrder, int64_t offset, uint32_t dataIdx, + virtual uint32_t doWriteData(IoWrapper& ioWrapper, ByteOrder byteOrder, size_t offset, uint32_t dataIdx, uint32_t& imageIdx) const = 0; //! Implements writeImage(). virtual uint32_t doWriteImage(IoWrapper& ioWrapper, ByteOrder byteOrder) const = 0; @@ -410,7 +410,7 @@ class TiffEntryBase : public TiffComponent { */ void encode(TiffEncoder& encoder, const Exifdatum* datum); //! Set the offset - void setOffset(int64_t offset) { + void setOffset(size_t offset) { offset_ = offset; } /*! @@ -459,7 +459,7 @@ class TiffEntryBase : public TiffComponent { @brief Return the offset to the data area relative to the base for the component (usually the start of the TIFF header) */ - [[nodiscard]] int64_t offset() const { + [[nodiscard]] size_t offset() const { return offset_; } /*! @@ -503,7 +503,7 @@ class TiffEntryBase : public TiffComponent { the \em ioWrapper, return the number of bytes written. Only the \em ioWrapper and \em byteOrder arguments are used. */ - uint32_t doWrite(IoWrapper& ioWrapper, ByteOrder byteOrder, int64_t offset, uint32_t valueIdx, uint32_t dataIdx, + uint32_t doWrite(IoWrapper& ioWrapper, ByteOrder byteOrder, size_t offset, uint32_t valueIdx, uint32_t dataIdx, uint32_t& imageIdx) override; //@} @@ -515,7 +515,7 @@ class TiffEntryBase : public TiffComponent { @brief Implements writeData(). Standard TIFF entries have no data: write nothing and return 0. */ - uint32_t doWriteData(IoWrapper& ioWrapper, ByteOrder byteOrder, int64_t offset, uint32_t dataIdx, + uint32_t doWriteData(IoWrapper& ioWrapper, ByteOrder byteOrder, size_t offset, uint32_t dataIdx, uint32_t& imageIdx) const override; /*! @brief Implements writeImage(). Standard TIFF entries have no image data: @@ -531,7 +531,7 @@ class TiffEntryBase : public TiffComponent { //@} //! Helper function to write an \em offset to a preallocated binary buffer - static uint32_t writeOffset(byte* buf, int64_t offset, TiffType tiffType, ByteOrder byteOrder); + static uint32_t writeOffset(byte* buf, size_t offset, TiffType tiffType, ByteOrder byteOrder); //! Used (internally) to create another reference to the DataBuf reference by storage_. [[nodiscard]] const std::shared_ptr& storage() const { @@ -542,7 +542,7 @@ class TiffEntryBase : public TiffComponent { // DATA TiffType tiffType_; //!< Field TIFF type size_t count_{}; //!< The number of values of the indicated type - int64_t offset_{}; //!< Offset to the data area + size_t offset_{}; //!< Offset to the data area size_t size_{}; //!< Size of the data buffer holding the value in bytes, there is no minimum size. // Notes on the ownership model of pData_: pData_ is a always a @@ -681,7 +681,7 @@ class TiffDataEntry : public TiffDataEntryBase { on write. The type of the value can only be signed or unsigned short or long. */ - uint32_t doWrite(IoWrapper& ioWrapper, ByteOrder byteOrder, int64_t offset, uint32_t valueIdx, uint32_t dataIdx, + uint32_t doWrite(IoWrapper& ioWrapper, ByteOrder byteOrder, size_t offset, uint32_t valueIdx, uint32_t dataIdx, uint32_t& imageIdx) override; //@} @@ -692,7 +692,7 @@ class TiffDataEntry : public TiffDataEntryBase { @brief Implements writeData(). Write the data area to the \em ioWrapper. Return the number of bytes written. */ - uint32_t doWriteData(IoWrapper& ioWrapper, ByteOrder byteOrder, int64_t offset, uint32_t dataIdx, + uint32_t doWriteData(IoWrapper& ioWrapper, ByteOrder byteOrder, size_t offset, uint32_t dataIdx, uint32_t& imageIdx) const override; // Using doWriteImage from base class // Using doSize() from base class @@ -740,7 +740,7 @@ class TiffImageEntry : public TiffDataEntryBase { \em ioWrapper. Return the number of bytes written. The \em valueIdx and \em dataIdx arguments are not used. */ - uint32_t doWrite(IoWrapper& ioWrapper, ByteOrder byteOrder, int64_t offset, uint32_t valueIdx, uint32_t dataIdx, + uint32_t doWrite(IoWrapper& ioWrapper, ByteOrder byteOrder, size_t offset, uint32_t valueIdx, uint32_t dataIdx, uint32_t& imageIdx) override; //@} @@ -755,7 +755,7 @@ class TiffImageEntry : public TiffDataEntryBase { directory. It is used for TIFF image entries in the makernote (large preview images) so that the image data remains in the makernote IFD. */ - uint32_t doWriteData(IoWrapper& ioWrapper, ByteOrder byteOrder, int64_t offset, uint32_t dataIdx, + uint32_t doWriteData(IoWrapper& ioWrapper, ByteOrder byteOrder, size_t offset, uint32_t dataIdx, uint32_t& imageIdx) const override; /*! @brief Implements writeImage(). Write the image data area to the \em ioWrapper. @@ -879,7 +879,7 @@ class TiffDirectory : public TiffComponent { additional data, including the next-IFD, if any, to the \em ioWrapper, return the number of bytes written. */ - uint32_t doWrite(IoWrapper& ioWrapper, ByteOrder byteOrder, int64_t offset, uint32_t valueIdx, uint32_t dataIdx, + uint32_t doWrite(IoWrapper& ioWrapper, ByteOrder byteOrder, size_t offset, uint32_t valueIdx, uint32_t dataIdx, uint32_t& imageIdx) override; //@} @@ -890,7 +890,7 @@ class TiffDirectory : public TiffComponent { @brief This class does not really implement writeData(), it only has write(). This method must not be called; it commits suicide. */ - uint32_t doWriteData(IoWrapper& ioWrapper, ByteOrder byteOrder, int64_t offset, uint32_t dataIdx, + uint32_t doWriteData(IoWrapper& ioWrapper, ByteOrder byteOrder, size_t offset, uint32_t dataIdx, uint32_t& imageIdx) const override; /*! @brief Implements writeImage(). Write the image data of the TIFF @@ -925,8 +925,8 @@ class TiffDirectory : public TiffComponent { //! @name Private Accessors //@{ //! Write a binary directory entry for a TIFF component. - static uint32_t writeDirEntry(IoWrapper& ioWrapper, ByteOrder byteOrder, int64_t offset, - TiffComponent* pTiffComponent, uint32_t valueIdx, uint32_t dataIdx, uint32_t& imageIdx); + static uint32_t writeDirEntry(IoWrapper& ioWrapper, ByteOrder byteOrder, size_t offset, TiffComponent* pTiffComponent, + uint32_t valueIdx, uint32_t dataIdx, uint32_t& imageIdx); //@} // DATA @@ -975,7 +975,7 @@ class TiffSubIfd : public TiffEntryBase { return the number of bytes written. The \em valueIdx and \em imageIdx arguments are not used. */ - uint32_t doWrite(IoWrapper& ioWrapper, ByteOrder byteOrder, int64_t offset, uint32_t valueIdx, uint32_t dataIdx, + uint32_t doWrite(IoWrapper& ioWrapper, ByteOrder byteOrder, size_t offset, uint32_t valueIdx, uint32_t dataIdx, uint32_t& imageIdx) override; //@} @@ -986,7 +986,7 @@ class TiffSubIfd : public TiffEntryBase { @brief Implements writeData(). Write the sub-IFDs to the \em ioWrapper. Return the number of bytes written. */ - uint32_t doWriteData(IoWrapper& ioWrapper, ByteOrder byteOrder, int64_t offset, uint32_t dataIdx, + uint32_t doWriteData(IoWrapper& ioWrapper, ByteOrder byteOrder, size_t offset, uint32_t dataIdx, uint32_t& imageIdx) const override; /*! @brief Implements writeImage(). Write the image data of each sub-IFD to @@ -1053,7 +1053,7 @@ class TiffMnEntry : public TiffEntryBase { @brief Implements write() by forwarding the call to the actual concrete Makernote, if there is one. */ - uint32_t doWrite(IoWrapper& ioWrapper, ByteOrder byteOrder, int64_t offset, uint32_t valueIdx, uint32_t dataIdx, + uint32_t doWrite(IoWrapper& ioWrapper, ByteOrder byteOrder, size_t offset, uint32_t valueIdx, uint32_t dataIdx, uint32_t& imageIdx) override; //@} @@ -1186,7 +1186,7 @@ class TiffIfdMakernote : public TiffComponent { values and additional data to the \em ioWrapper, return the number of bytes written. */ - uint32_t doWrite(IoWrapper& ioWrapper, ByteOrder byteOrder, int64_t offset, uint32_t valueIdx, uint32_t dataIdx, + uint32_t doWrite(IoWrapper& ioWrapper, ByteOrder byteOrder, size_t offset, uint32_t valueIdx, uint32_t dataIdx, uint32_t& imageIdx) override; //@} @@ -1197,7 +1197,7 @@ class TiffIfdMakernote : public TiffComponent { @brief This class does not really implement writeData(), it only has write(). This method must not be called; it commits suicide. */ - uint32_t doWriteData(IoWrapper& ioWrapper, ByteOrder byteOrder, int64_t offset, uint32_t dataIdx, + uint32_t doWriteData(IoWrapper& ioWrapper, ByteOrder byteOrder, size_t offset, uint32_t dataIdx, uint32_t& imageIdx) const override; /*! @brief Implements writeImage(). Write the image data of the IFD of @@ -1384,7 +1384,7 @@ class TiffBinaryArray : public TiffEntryBase { /*! @brief Implements write(). Todo: Document it! */ - uint32_t doWrite(IoWrapper& ioWrapper, ByteOrder byteOrder, int64_t offset, uint32_t valueIdx, uint32_t dataIdx, + uint32_t doWrite(IoWrapper& ioWrapper, ByteOrder byteOrder, size_t offset, uint32_t valueIdx, uint32_t dataIdx, uint32_t& imageIdx) override; //@} @@ -1472,7 +1472,7 @@ class TiffBinaryElement : public TiffEntryBase { /*! @brief Implements write(). Todo: Document it! */ - uint32_t doWrite(IoWrapper& ioWrapper, ByteOrder byteOrder, int64_t offset, uint32_t valueIdx, uint32_t dataIdx, + uint32_t doWrite(IoWrapper& ioWrapper, ByteOrder byteOrder, size_t offset, uint32_t valueIdx, uint32_t dataIdx, uint32_t& imageIdx) override; //@}