Update to 1.16.1

epel9
Neal Gompa 2 years ago
parent 9ff4a5010c
commit ba9929a05a

1
.gitignore vendored

@ -1,2 +1,3 @@
/libheif-1.15.1.tar.gz
/libheif-1.15.2.tar.gz
/libheif-1.16.1.tar.gz

@ -1,133 +0,0 @@
From 1e24db049f05a53ff7bd732ccde50c41bcd7d690 Mon Sep 17 00:00:00 2001
From: fairay <ffairay@gmail.com>
Date: Thu, 6 Apr 2023 15:31:20 +0300
Subject: [PATCH 1/2] Add image reference cycle detection
---
libheif/error.cc | 2 ++
libheif/heif.h | 3 +++
libheif/heif_file.cc | 30 ++++++++++++++++++++++++++++++
libheif/heif_file.h | 5 +++++
4 files changed, 40 insertions(+)
diff --git a/libheif/error.cc b/libheif/error.cc
index d653cb44d7..7eef599cba 100644
--- a/libheif/error.cc
+++ b/libheif/error.cc
@@ -179,6 +179,8 @@ const char* heif::Error::get_error_string(heif_suberror_code err)
return "Unsupported parameter";
case heif_suberror_Invalid_parameter_value:
return "Invalid parameter value";
+ case heif_suberror_Item_reference_cycle:
+ return "Image reference cycle";
// --- Unsupported_feature ---
diff --git a/libheif/heif.h b/libheif/heif.h
index 793e46c871..c41955b19c 100644
--- a/libheif/heif.h
+++ b/libheif/heif.h
@@ -253,6 +253,9 @@ enum heif_suberror_code
// The value for the given parameter is not in the valid range.
heif_suberror_Invalid_parameter_value = 2006,
+ // Image reference cycle found in iref
+ heif_suberror_Item_reference_cycle = 2007,
+
// --- Unsupported_feature ---
diff --git a/libheif/heif_file.cc b/libheif/heif_file.cc
index 9b887e47b7..d1add4a3f3 100644
--- a/libheif/heif_file.cc
+++ b/libheif/heif_file.cc
@@ -318,6 +318,13 @@ Error HeifFile::parse_heif_file(BitstreamRange& range)
m_idat_box = std::dynamic_pointer_cast<Box_idat>(m_meta_box->get_child_box(fourcc("idat")));
m_iref_box = std::dynamic_pointer_cast<Box_iref>(m_meta_box->get_child_box(fourcc("iref")));
+ if (m_iref_box) {
+ std::unordered_set<heif_item_id> parent_items;
+ Error error = check_for_ref_cycle(get_primary_image_ID(), m_iref_box, parent_items);
+ if (error) {
+ return error;
+ }
+ }
m_iinf_box = std::dynamic_pointer_cast<Box_iinf>(m_meta_box->get_child_box(fourcc("iinf")));
if (!m_iinf_box) {
@@ -345,6 +352,29 @@ Error HeifFile::parse_heif_file(BitstreamRange& range)
}
+Error HeifFile::check_for_ref_cycle(heif_item_id ID,
+ std::shared_ptr<Box_iref>& iref_box,
+ std::unordered_set<heif_item_id>& parent_items) const {
+ if (parent_items.contains(ID)) {
+ return Error(heif_error_Invalid_input,
+ heif_suberror_Item_reference_cycle,
+ "Image reference cycle");
+ }
+ parent_items.insert(ID);
+
+ std::vector<heif_item_id> image_references = iref_box->get_references(ID, fourcc("dimg"));
+ for (heif_item_id reference_idx : image_references) {
+ Error error = check_for_ref_cycle(reference_idx, iref_box, parent_items);
+ if (error) {
+ return error;
+ }
+ }
+
+ parent_items.erase(ID);
+ return Error::Ok;
+}
+
+
bool HeifFile::image_exists(heif_item_id ID) const
{
auto image_iter = m_infe_boxes.find(ID);
diff --git a/libheif/heif_file.h b/libheif/heif_file.h
index bdc0a10993..4c95227396 100644
--- a/libheif/heif_file.h
+++ b/libheif/heif_file.h
@@ -32,6 +32,7 @@
#include <string>
#include <map>
#include <vector>
+#include <unordered_set>
#if ENABLE_PARALLEL_TILE_DECODING
#include <mutex>
@@ -199,6 +200,10 @@ namespace heif {
Error parse_heif_file(BitstreamRange& bitstream);
+ Error check_for_ref_cycle(heif_item_id ID,
+ std::shared_ptr<Box_iref>& iref_box,
+ std::unordered_set<heif_item_id>& parent_items) const;
+
std::shared_ptr<Box_infe> get_infe(heif_item_id ID) const;
};
From 5170f7c0ed068b3c9eb91e257d9d496b4c611151 Mon Sep 17 00:00:00 2001
From: fairay <ffairay@gmail.com>
Date: Thu, 6 Apr 2023 17:01:35 +0300
Subject: [PATCH 2/2] fix contains method usage
---
libheif/heif_file.cc | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/libheif/heif_file.cc b/libheif/heif_file.cc
index d1add4a3f3..df35011164 100644
--- a/libheif/heif_file.cc
+++ b/libheif/heif_file.cc
@@ -355,7 +355,7 @@ Error HeifFile::parse_heif_file(BitstreamRange& range)
Error HeifFile::check_for_ref_cycle(heif_item_id ID,
std::shared_ptr<Box_iref>& iref_box,
std::unordered_set<heif_item_id>& parent_items) const {
- if (parent_items.contains(ID)) {
+ if (parent_items.find(ID) != parent_items.end()) {
return Error(heif_error_Invalid_input,
heif_suberror_Item_reference_cycle,
"Image reference cycle");

@ -4,14 +4,13 @@
%bcond_with hevc
Name: libheif
Version: 1.15.2
Version: 1.16.1
Release: 1%{?dist}
Summary: HEIF and AVIF file format decoder and encoder
License: LGPL-3.0-or-later and MIT
URL: https://github.com/strukturag/%{name}
Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz
Patch0: https://patch-diff.githubusercontent.com/raw/strukturag/libheif/pull/815.patch
BuildRequires: cmake
BuildRequires: gcc-c++
@ -21,6 +20,7 @@ BuildRequires: pkgconfig(dav1d)
BuildRequires: pkgconfig(libjpeg)
BuildRequires: pkgconfig(libpng)
%if ! (0%{?rhel} && 0%{?rhel} <= 9)
BuildRequires: pkgconfig(libsharpyuv)
BuildRequires: pkgconfig(rav1e)
%endif
%if ! ((0%{?rhel} && 0%{?rhel} <= 9) || (0%{?fedora} && 0%{?fedora} < 38))
@ -135,6 +135,9 @@ rm -rf third-party/
%changelog
* Fri May 05 2023 Neal Gompa <ngompa@fedoraproject.org> - 1.16.1-1
- Update to 1.16.1
* Sun Apr 30 2023 Dominik Mierzejewski <dominik@greysector.net> - 1.15.2-2
- backport fix for issue#590

@ -1 +1 @@
SHA512 (libheif-1.15.2.tar.gz) = 075a7aba14be6abcd8ff129ba94f6195cd5c1a4197a96f3214c323e0028f1b4810e8ea54ecb5c5711f6ebab8be92087c06ca3a1a222ebe9047fc1323ab6e56e5
SHA512 (libheif-1.16.1.tar.gz) = d81f841ac63d58f56414bf8d799a12af0c846148d2c245cd0c0cc3133edd0b3e08e5018efbc82b83fbab00209a6e0806133f63283bf7244cc4e9cf37b4fa8110

Loading…
Cancel
Save