From 1c04d76d4d66f66195a12479d0556c22b48dd010 Mon Sep 17 00:00:00 2001 From: Rosen Penev Date: Thu, 18 Jan 2024 18:37:41 -0800 Subject: [PATCH 1/4] replace reinterpret_cast with memcpy Fixes cast-align warning on 32-bit. Signed-off-by: Rosen Penev --- src/http.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/http.cpp b/src/http.cpp index d343beba6b..cec119a1ca 100644 --- a/src/http.cpp +++ b/src/http.cpp @@ -210,7 +210,7 @@ int Exiv2::http(Exiv2::Dictionary& request, Exiv2::Dictionary& response, std::st return error(errors, "no such host: %s", gai_strerror(res)); } - serv_addr = *reinterpret_cast(result->ai_addr); + std::memcpy(&serv_addr, result->ai_addr, serv_len); freeaddrinfo(result); } From 99bec2e72293c780242455bdd837bf296943465f Mon Sep 17 00:00:00 2001 From: Rosen Penev Date: Thu, 18 Jan 2024 20:07:26 -0800 Subject: [PATCH 2/4] replace copy_n + reinterpret_cast with memcpy These usages are not problematic, but they would be if alignment does not match. Also less verbose. Signed-off-by: Rosen Penev --- src/asfvideo.cpp | 6 +++--- src/jp2image.cpp | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/asfvideo.cpp b/src/asfvideo.cpp index 15d0edc323..f52d39eb6a 100644 --- a/src/asfvideo.cpp +++ b/src/asfvideo.cpp @@ -47,9 +47,9 @@ bool AsfVideo::GUIDTag::operator==(const AsfVideo::GUIDTag& other) const { } AsfVideo::GUIDTag::GUIDTag(const uint8_t* bytes) { - std::copy_n(bytes, DWORD, reinterpret_cast(&data1_)); - std::copy_n(bytes + DWORD, WORD, reinterpret_cast(&data2_)); - std::copy_n(bytes + DWORD + WORD, WORD, reinterpret_cast(&data3_)); + std::memcpy(&data1_, bytes, DWORD); + std::memcpy(&data2_, bytes + DWORD, WORD); + std::memcpy(&data3_, bytes + DWORD + WORD, WORD); std::copy(bytes + QWORD, bytes + 2 * QWORD, data4_.begin()); if (isBigEndianPlatform()) { data1_ = byteSwap(data1_, true); diff --git a/src/jp2image.cpp b/src/jp2image.cpp index c61cc3558e..153bc725c3 100644 --- a/src/jp2image.cpp +++ b/src/jp2image.cpp @@ -601,7 +601,7 @@ void Jp2Image::encodeJp2Header(const DataBuf& boxBuf, DataBuf& outBuf) { while (count < length && !bWroteColor) { Internal::enforce(boxHSize <= length - count, ErrorCode::kerCorruptedMetadata); Internal::Jp2BoxHeader subBox; - std::copy_n(boxBuf.c_data(count), boxHSize, reinterpret_cast(&subBox)); + std::memcpy(&subBox, boxBuf.c_data(count), boxHSize); Internal::Jp2BoxHeader newBox = subBox; if (count < length) { From 9bde699f763d8d68ccfb6154e5e8efa9131ca895 Mon Sep 17 00:00:00 2001 From: Rosen Penev Date: Thu, 18 Jan 2024 20:18:56 -0800 Subject: [PATCH 3/4] replace memmove with copy_n They are equivalent. Signed-off-by: Rosen Penev --- src/tiffvisitor_int.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tiffvisitor_int.cpp b/src/tiffvisitor_int.cpp index a06f253f23..c7cc4980da 100644 --- a/src/tiffvisitor_int.cpp +++ b/src/tiffvisitor_int.cpp @@ -601,7 +601,7 @@ uint32_t TiffEncoder::updateDirEntry(byte* buf, ByteOrder byteOrder, TiffCompone #endif memset(buf + 8, 0x0, 4); if (pTiffEntry->size() > 0) { - memmove(buf + 8, pTiffEntry->pData(), pTiffEntry->size()); + std::copy_n(pTiffEntry->pData(), pTiffEntry->size(), buf + 8); memset(const_cast(pTiffEntry->pData()), 0x0, pTiffEntry->size()); } } From ba2f8cb65d6f3e1dd0062756113881c3df400ec2 Mon Sep 17 00:00:00 2001 From: Rosen Penev Date: Fri, 19 Jan 2024 00:04:03 -0800 Subject: [PATCH 4/4] remove warning supression No longer relevant. Signed-off-by: Rosen Penev --- src/jp2image.cpp | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/src/jp2image.cpp b/src/jp2image.cpp index 153bc725c3..42991a4590 100644 --- a/src/jp2image.cpp +++ b/src/jp2image.cpp @@ -582,12 +582,6 @@ void Jp2Image::writeMetadata() { } // Jp2Image::writeMetadata -#ifdef __clang__ -// ignore cast align errors. dataBuf.pData_ is allocated by malloc() and 4 (or 8 byte aligned). -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wcast-align" -#endif - void Jp2Image::encodeJp2Header(const DataBuf& boxBuf, DataBuf& outBuf) { DataBuf output(boxBuf.size() + iccProfile_.size() + 100); // allocate sufficient space size_t outlen = boxHSize; // now many bytes have we written to output? @@ -659,10 +653,6 @@ void Jp2Image::encodeJp2Header(const DataBuf& boxBuf, DataBuf& outBuf) { ul2Data(outBuf.data(4), kJp2BoxTypeHeader, bigEndian); } -#ifdef __clang__ -#pragma clang diagnostic pop -#endif - void Jp2Image::doWriteMetadata(BasicIo& outIo) { if (!io_->isopen()) throw Error(ErrorCode::kerInputDataReadFailed);