From 44ef6ae377d85cad3f858e87ca8970d0f00c5243 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Milo=C5=A1=20Komar=C4=8Devi=C4=87?= <4973094+kmilos@users.noreply.github.com> Date: Thu, 10 Mar 2022 20:39:20 +0100 Subject: [PATCH] Strip XMP raw packet before decoding (#2139) (cherry picked from commit eb49d66caf485cd165bc5647289928aa8386261f) --- src/xmp.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/xmp.cpp b/src/xmp.cpp index c074914fb2..94a8ed44de 100644 --- a/src/xmp.cpp +++ b/src/xmp.cpp @@ -765,8 +765,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;