Blame SOURCES/exiv2-CVE-2021-29458.patch

a52745
From 0a91b56616404f7b29ca28deb01ce18b767d1871 Mon Sep 17 00:00:00 2001
a52745
From: Kevin Backhouse <kevinbackhouse@github.com>
a52745
Date: Fri, 9 Apr 2021 13:26:23 +0100
a52745
Subject: [PATCH 1/5] Fix incorrect delete.
a52745
a52745
---
a52745
 src/crwimage_int.cpp | 2 +-
a52745
 1 file changed, 1 insertion(+), 1 deletion(-)
a52745
a52745
diff --git a/src/crwimage_int.cpp b/src/crwimage_int.cpp
a52745
index a44a67e2c..6f89fa8b8 100644
a52745
--- a/src/crwimage_int.cpp
a52745
+++ b/src/crwimage_int.cpp
a52745
@@ -579,7 +579,7 @@ namespace Exiv2 {
a52745
     void CiffComponent::setValue(DataBuf buf)
a52745
     {
a52745
         if (isAllocated_) {
a52745
-            delete pData_;
a52745
+            delete[] pData_;
a52745
             pData_ = 0;
a52745
             size_ = 0;
a52745
         }
a52745
a52745
From 9b7a19f957af53304655ed1efe32253a1b11a8d0 Mon Sep 17 00:00:00 2001
a52745
From: Kevin Backhouse <kevinbackhouse@github.com>
a52745
Date: Fri, 9 Apr 2021 13:37:48 +0100
a52745
Subject: [PATCH 3/5] Fix integer overflow.
a52745
a52745
---
a52745
 src/crwimage_int.cpp | 6 +++++-
a52745
 1 file changed, 5 insertions(+), 1 deletion(-)
a52745
a52745
diff --git a/src/crwimage_int.cpp b/src/crwimage_int.cpp
a52745
index 6f89fa8b8..7b958c26f 100644
a52745
--- a/src/crwimage_int.cpp
a52745
+++ b/src/crwimage_int.cpp
a52745
@@ -1187,7 +1187,11 @@ namespace Exiv2 {
a52745
                                                  pCrwMapping->crwDir_);
a52745
         if (edX != edEnd || edY != edEnd || edO != edEnd) {
a52745
             uint32_t size = 28;
a52745
-            if (cc && cc->size() > size) size = cc->size();
a52745
+            if (cc) {
a52745
+              if (cc->size() < size)
a52745
+                throw Error(kerCorruptedMetadata);
a52745
+              size = cc->size();
a52745
+            }
a52745
             DataBuf buf(size);
a52745
             std::memset(buf.pData_, 0x0, buf.size_);
a52745
             if (cc) std::memcpy(buf.pData_ + 8, cc->pData() + 8, cc->size() - 8);