From eb49d66caf485cd165bc5647289928aa8386261f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Milo=C5=A1=20Komar=C4=8Devi=C4=87?= Date: Wed, 9 Mar 2022 17:43:20 +0100 Subject: [PATCH] Strip XMP raw packet before decoding --- src/xmp.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/xmp.cpp b/src/xmp.cpp index 816d9de5..8dfaad67 100644 --- a/src/xmp.cpp +++ b/src/xmp.cpp @@ -753,8 +753,12 @@ namespace Exiv2 { return 2; } - XMLValidator::check(xmpPacket.data(), xmpPacket.size()); - SXMPMeta meta(xmpPacket.data(), static_cast(xmpPacket.size())); + // Make sure the unterminated substring is used + size_t len = xmpPacket.size(); + while (len > 0 && 0 == xmpPacket[len - 1]) --len; + + XMLValidator::check(xmpPacket.data(), len); + SXMPMeta meta(xmpPacket.data(), static_cast(len)); SXMPIterator iter(meta); std::string schemaNs, propPath, propValue; XMP_OptionBits opt = 0;