diff --git a/include/exiv2/photoshop.hpp b/include/exiv2/photoshop.hpp index d8ef1015..31c420ad 100644 --- a/include/exiv2/photoshop.hpp +++ b/include/exiv2/photoshop.hpp @@ -47,16 +47,16 @@ struct EXIV2API Photoshop { /// @return 0 if successful;
/// 3 if no data for psTag was found in pPsData;
/// -2 if the pPsData buffer does not contain valid data. - static int locateIrb(const byte* pPsData, size_t sizePsData, uint16_t psTag, const byte** record, uint32_t* sizeHdr, - uint32_t* sizeData); + static int locateIrb(const byte* pPsData, size_t sizePsData, uint16_t psTag, const byte** record, uint32_t& sizeHdr, + uint32_t& sizeData); /// @brief Forwards to locateIrb() with \em psTag = \em iptc_ - static int locateIptcIrb(const byte* pPsData, size_t sizePsData, const byte** record, uint32_t* sizeHdr, - uint32_t* sizeData); + static int locateIptcIrb(const byte* pPsData, size_t sizePsData, const byte** record, uint32_t& sizeHdr, + uint32_t& sizeData); /// @brief Forwards to locatePreviewIrb() with \em psTag = \em preview_ - static int locatePreviewIrb(const byte* pPsData, size_t sizePsData, const byte** record, uint32_t* sizeHdr, - uint32_t* sizeData); + static int locatePreviewIrb(const byte* pPsData, size_t sizePsData, const byte** record, uint32_t& sizeHdr, + uint32_t& sizeData); /// @brief Set the new IPTC IRB, keeps existing IRBs but removes the IPTC block if there is no new IPTC data to write. /// @param pPsData Existing IRB buffer diff --git a/samples/largeiptc-test.cpp b/samples/largeiptc-test.cpp index deb2bd38..7db0d910 100644 --- a/samples/largeiptc-test.cpp +++ b/samples/largeiptc-test.cpp @@ -52,7 +52,7 @@ int main(int argc, char* const argv[]) { const Exiv2::byte* record; uint32_t sizeHdr = 0; uint32_t sizeData = 0; - Exiv2::Photoshop::locateIptcIrb(irb.data(), irb.size(), &record, &sizeHdr, &sizeData); + Exiv2::Photoshop::locateIptcIrb(irb.data(), irb.size(), &record, sizeHdr, sizeData); Exiv2::DataBuf rawIptc = Exiv2::IptcParser::encode(iptcData); std::cout << "Comparing IPTC and IRB size... "; if (static_cast(rawIptc.size()) != sizeData) { diff --git a/src/jpgimage.cpp b/src/jpgimage.cpp index a191ff2b..9b9f19e4 100644 --- a/src/jpgimage.cpp +++ b/src/jpgimage.cpp @@ -264,7 +264,7 @@ void JpegBase::readMetadata() { uint32_t sizeHdr = 0; const byte* pCur = &psBlob[0]; const byte* pEnd = pCur + psBlob.size(); - while (pCur < pEnd && 0 == Photoshop::locateIptcIrb(pCur, pEnd - pCur, &record, &sizeHdr, &sizeIptc)) { + while (pCur < pEnd && 0 == Photoshop::locateIptcIrb(pCur, pEnd - pCur, &record, sizeHdr, sizeIptc)) { #ifdef EXIV2_DEBUG_MESSAGES std::cerr << "Found IPTC IRB, size = " << sizeIptc << "\n"; #endif diff --git a/src/photoshop.cpp b/src/photoshop.cpp index 697da0d0..526f2ea0 100644 --- a/src/photoshop.cpp +++ b/src/photoshop.cpp @@ -22,7 +22,7 @@ bool Photoshop::valid(const byte* pPsData, size_t sizePsData) { const byte* pCur = pPsData; const byte* pEnd = pPsData + sizePsData; int ret = 0; - while (pCur < pEnd && 0 == (ret = Photoshop::locateIptcIrb(pCur, (pEnd - pCur), &record, &sizeHdr, &sizeIptc))) { + while (pCur < pEnd && 0 == (ret = Photoshop::locateIptcIrb(pCur, (pEnd - pCur), &record, sizeHdr, sizeIptc))) { pCur = record + sizeHdr + sizeIptc + (sizeIptc & 1); } return ret >= 0; @@ -31,8 +31,8 @@ bool Photoshop::valid(const byte* pPsData, size_t sizePsData) { // Todo: Generalised from JpegBase::locateIptcData without really understanding // the format (in particular the header). So it remains to be confirmed // if this also makes sense for psTag != Photoshop::iptc -int Photoshop::locateIrb(const byte* pPsData, size_t sizePsData, uint16_t psTag, const byte** record, uint32_t* sizeHdr, - uint32_t* sizeData) { +int Photoshop::locateIrb(const byte* pPsData, size_t sizePsData, uint16_t psTag, const byte** record, uint32_t& sizeHdr, + uint32_t& sizeData) { if (sizePsData < 12) { return 3; } @@ -81,8 +81,8 @@ int Photoshop::locateIrb(const byte* pPsData, size_t sizePsData, uint16_t psTag, #ifdef EXIV2_DEBUG_MESSAGES std::cerr << "ok\n"; #endif - *sizeData = dataSize; - *sizeHdr = psSize + 10; + sizeData = dataSize; + sizeHdr = psSize + 10; *record = hrd; return 0; } @@ -102,13 +102,13 @@ int Photoshop::locateIrb(const byte* pPsData, size_t sizePsData, uint16_t psTag, return 3; } -int Photoshop::locateIptcIrb(const byte* pPsData, size_t sizePsData, const byte** record, uint32_t* sizeHdr, - uint32_t* sizeData) { +int Photoshop::locateIptcIrb(const byte* pPsData, size_t sizePsData, const byte** record, uint32_t& sizeHdr, + uint32_t& sizeData) { return locateIrb(pPsData, sizePsData, iptc_, record, sizeHdr, sizeData); } -int Photoshop::locatePreviewIrb(const byte* pPsData, size_t sizePsData, const byte** record, uint32_t* sizeHdr, - uint32_t* sizeData) { +int Photoshop::locatePreviewIrb(const byte* pPsData, size_t sizePsData, const byte** record, uint32_t& sizeHdr, + uint32_t& sizeData) { return locateIrb(pPsData, sizePsData, preview_, record, sizeHdr, sizeData); } @@ -124,7 +124,7 @@ DataBuf Photoshop::setIptcIrb(const byte* pPsData, size_t sizePsData, const Iptc uint32_t sizeIptc = 0; uint32_t sizeHdr = 0; DataBuf rc; - if (0 > Photoshop::locateIptcIrb(pPsData, sizePsData, &record, &sizeHdr, &sizeIptc)) { + if (0 > Photoshop::locateIptcIrb(pPsData, sizePsData, &record, sizeHdr, sizeIptc)) { return rc; } @@ -155,7 +155,7 @@ DataBuf Photoshop::setIptcIrb(const byte* pPsData, size_t sizePsData, const Iptc size_t pos = sizeFront; auto nextSizeData = Safe::add(static_cast(sizePsData), -static_cast(pos)); enforce(nextSizeData >= 0, ErrorCode::kerCorruptedMetadata); - while (0 == Photoshop::locateIptcIrb(pPsData + pos, nextSizeData, &record, &sizeHdr, &sizeIptc)) { + while (0 == Photoshop::locateIptcIrb(pPsData + pos, nextSizeData, &record, sizeHdr, sizeIptc)) { const auto newPos = static_cast(record - pPsData); if (newPos > pos) { // Copy data up to the IPTC IRB append(psBlob, pPsData + pos, newPos - pos); diff --git a/src/pngchunk_int.cpp b/src/pngchunk_int.cpp index 4e18431b..2cd40169 100644 --- a/src/pngchunk_int.cpp +++ b/src/pngchunk_int.cpp @@ -235,7 +235,7 @@ void PngChunk::parseChunkContent(Image* pImage, const byte* key, size_t keySize, const byte* pEnd = psData.c_data(psData.size() - 1); const byte* pCur = psData.c_data(); - while (pCur < pEnd && 0 == Photoshop::locateIptcIrb(pCur, pEnd - pCur, &record, &sizeHdr, &sizeIptc)) { + while (pCur < pEnd && 0 == Photoshop::locateIptcIrb(pCur, pEnd - pCur, &record, sizeHdr, sizeIptc)) { if (sizeIptc) { #ifdef EXIV2_DEBUG_MESSAGES std::cerr << "Found IPTC IRB, size = " << sizeIptc << "\n"; diff --git a/src/preview.cpp b/src/preview.cpp index ee7e6415..ef6f842e 100644 --- a/src/preview.cpp +++ b/src/preview.cpp @@ -419,7 +419,7 @@ DataBuf LoaderNative::getData() const { const byte* record; uint32_t sizeHdr = 0; uint32_t sizeData = 0; - if (Photoshop::locatePreviewIrb(psData.c_data(), psData.size(), &record, &sizeHdr, &sizeData) != 0) { + if (Photoshop::locatePreviewIrb(psData.c_data(), psData.size(), &record, sizeHdr, sizeData) != 0) { #ifndef SUPPRESS_WARNINGS EXV_WARNING << "Missing preview IRB in Photoshop EPS preview.\n"; #endif diff --git a/src/tiffvisitor_int.cpp b/src/tiffvisitor_int.cpp index 30c5cf6d..dd01ded5 100644 --- a/src/tiffvisitor_int.cpp +++ b/src/tiffvisitor_int.cpp @@ -330,7 +330,7 @@ void TiffDecoder::decodeIptc(const TiffEntryBase* object) { byte const* record = nullptr; uint32_t sizeHdr = 0; uint32_t sizeData = 0; - if (0 != Photoshop::locateIptcIrb(pData, size, &record, &sizeHdr, &sizeData)) { + if (0 != Photoshop::locateIptcIrb(pData, size, &record, sizeHdr, sizeData)) { return; } if (0 == IptcParser::decode(iptcData_, record + sizeHdr, sizeData)) { diff --git a/unitTests/test_Photoshop.cpp b/unitTests/test_Photoshop.cpp index 1dd31b98..8b123206 100644 --- a/unitTests/test_Photoshop.cpp +++ b/unitTests/test_Photoshop.cpp @@ -41,7 +41,7 @@ TEST(Photoshop_locateIrb, returnsMinus2withInvalidPhotoshopIRB) { uint32_t sizeHdr = 0; uint32_t sizeData = 0; ASSERT_EQ(-2, Photoshop::locateIrb(reinterpret_cast(data.c_str()), data.size(), Photoshop::iptc_, - &record, &sizeHdr, &sizeData)); + &record, sizeHdr, sizeData)); } TEST(Photoshop_locateIrb, returnsMinus2WithMarkerNotStartingWith8BIM) { @@ -50,7 +50,7 @@ TEST(Photoshop_locateIrb, returnsMinus2WithMarkerNotStartingWith8BIM) { uint32_t sizeHdr = 0; uint32_t sizeData = 0; ASSERT_EQ(-2, Photoshop::locateIrb(reinterpret_cast(data.c_str()), data.size(), Photoshop::iptc_, - &record, &sizeHdr, &sizeData)); + &record, sizeHdr, sizeData)); } TEST(Photoshop_locateIrb, returns3withNotLongEnoughData) { @@ -59,7 +59,7 @@ TEST(Photoshop_locateIrb, returns3withNotLongEnoughData) { uint32_t sizeHdr = 0; uint32_t sizeData = 0; ASSERT_EQ(3, Photoshop::locateIrb(reinterpret_cast(data.c_str()), data.size(), Photoshop::iptc_, &record, - &sizeHdr, &sizeData)); + sizeHdr, sizeData)); } TEST(Photoshop_locateIrb, returns0withGoodIptcIrb) { @@ -75,7 +75,7 @@ TEST(Photoshop_locateIrb, returns0withGoodIptcIrb) { uint32_t sizeHdr = 0; uint32_t sizeData = 0; - ASSERT_EQ(0, Photoshop::locateIrb(data.data(), data.size(), Photoshop::iptc_, &record, &sizeHdr, &sizeData)); + ASSERT_EQ(0, Photoshop::locateIrb(data.data(), data.size(), Photoshop::iptc_, &record, sizeHdr, sizeData)); ASSERT_EQ(12, sizeHdr); ASSERT_EQ(27, sizeData); } @@ -93,7 +93,7 @@ TEST(Photoshop_locateIptcIrb, returns0withGoodIptcIrb) { uint32_t sizeHdr = 0; uint32_t sizeData = 0; - ASSERT_EQ(0, Photoshop::locateIptcIrb(data.data(), data.size(), &record, &sizeHdr, &sizeData)); + ASSERT_EQ(0, Photoshop::locateIptcIrb(data.data(), data.size(), &record, sizeHdr, sizeData)); ASSERT_EQ(12, sizeHdr); ASSERT_EQ(27, sizeData); } @@ -111,7 +111,7 @@ TEST(Photoshop_locateIptcIrb, returns3withoutIptcMarker) { uint32_t sizeHdr = 0; uint32_t sizeData = 0; - ASSERT_EQ(3, Photoshop::locateIptcIrb(data.data(), data.size(), &record, &sizeHdr, &sizeData)); + ASSERT_EQ(3, Photoshop::locateIptcIrb(data.data(), data.size(), &record, sizeHdr, sizeData)); } TEST(Photoshop_locatePreviewIrb, returns0withGoodPreviewIrb) { @@ -127,7 +127,7 @@ TEST(Photoshop_locatePreviewIrb, returns0withGoodPreviewIrb) { uint32_t sizeHdr = 0; uint32_t sizeData = 0; - ASSERT_EQ(0, Photoshop::locatePreviewIrb(data.data(), data.size(), &record, &sizeHdr, &sizeData)); + ASSERT_EQ(0, Photoshop::locatePreviewIrb(data.data(), data.size(), &record, sizeHdr, sizeData)); ASSERT_EQ(12, sizeHdr); ASSERT_EQ(27, sizeData); }