Compare commits

...

No commits in common. 'epel9' and 'i10ce' have entirely different histories.
epel9 ... i10ce

4
.gitignore vendored

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

@ -0,0 +1 @@
3765586601f9304d5dfd28980aeba8fe1ee8dafc SOURCES/libheif-1.17.6.tar.gz

@ -1,3 +0,0 @@
# libheif
The libheif package

@ -0,0 +1,23 @@
From 50aa08176e44178eeffcb7a66f37d7cad074f51b Mon Sep 17 00:00:00 2001
From: zhubo <zhubo.z@bytedance.com>
Date: Fri, 29 Dec 2023 23:16:57 +0800
Subject: [PATCH] Add kvazaar to REQUIRES_PRIVATE
---
CMakeLists.txt | 3 +++
1 file changed, 3 insertions(+)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index d996845e39..3a3f51d86f 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -234,6 +234,9 @@ endif()
if (X265_FOUND AND NOT (PLUGIN_LOADING_SUPPORTED_AND_ENABLED AND WITH_X265_PLUGIN))
list(APPEND REQUIRES_PRIVATE "x265")
endif()
+if (KVAZAAR_FOUND AND NOT (PLUGIN_LOADING_SUPPORTED_AND_ENABLED AND WITH_KVAZAAR_PLUGIN))
+ list(APPEND REQUIRES_PRIVATE "kvazaar")
+endif()
if ((AOM_DECODER_FOUND AND NOT (PLUGIN_LOADING_SUPPORTED_AND_ENABLED AND WITH_AOM_DECODER_PLUGIN))
OR (AOM_ENCODER_FOUND AND NOT (PLUGIN_LOADING_SUPPORTED_AND_ENABLED AND WITH_AOM_ENCODER_PLUGIN)))
list(APPEND REQUIRES_PRIVATE "aom")

@ -0,0 +1,42 @@
From 877de6b398198bca387df791b9232922c5721c80 Mon Sep 17 00:00:00 2001
From: zhailiangliang <zhailiangliang@loongson.cn>
Date: Thu, 21 Dec 2023 15:45:29 +0800
Subject: [PATCH] fix memory leaks in function JpegEncoder::Encode
---
examples/encoder_jpeg.cc | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/examples/encoder_jpeg.cc b/examples/encoder_jpeg.cc
index 6a8bae163a..b82f8aa39b 100644
--- a/examples/encoder_jpeg.cc
+++ b/examples/encoder_jpeg.cc
@@ -179,6 +179,9 @@ bool JpegEncoder::Encode(const struct heif_image_handle* handle,
uint32_t skip = (exifdata[0]<<24) | (exifdata[1]<<16) | (exifdata[2]<<8) | exifdata[3];
if (skip > (exifsize - 4)) {
fprintf(stderr, "Invalid EXIF data (offset too large)\n");
+ free(exifdata);
+ jpeg_destroy_compress(&cinfo);
+ fclose(fp);
return false;
}
skip += 4;
@@ -188,6 +191,9 @@ bool JpegEncoder::Encode(const struct heif_image_handle* handle,
if (size > std::numeric_limits<uint32_t>::max()) {
fprintf(stderr, "EXIF larger than 4GB is not supported");
+ free(exifdata);
+ jpeg_destroy_compress(&cinfo);
+ fclose(fp);
return false;
}
@@ -258,6 +264,8 @@ bool JpegEncoder::Encode(const struct heif_image_handle* handle,
if (heif_image_get_bits_per_pixel(image, heif_channel_Y) != 8) {
fprintf(stderr, "JPEG writer cannot handle image with >8 bpp.\n");
+ jpeg_destroy_compress(&cinfo);
+ fclose(fp);
return false;
}

@ -0,0 +1,21 @@
From 90955e3118d687fa8c36747a7b349caebc82707d Mon Sep 17 00:00:00 2001
From: zhailiangliang <zhailiangliang@loongson.cn>
Date: Thu, 11 Jan 2024 17:48:52 +0800
Subject: [PATCH] Fix potential memory leak in file heif_convert.cc
---
examples/heif_convert.cc | 1 +
1 file changed, 1 insertion(+)
diff --git a/examples/heif_convert.cc b/examples/heif_convert.cc
index 0e3cb4d2de..e57573235c 100644
--- a/examples/heif_convert.cc
+++ b/examples/heif_convert.cc
@@ -609,6 +609,7 @@ int main(int argc, char** argv)
const char* auxTypeC = nullptr;
err = heif_image_handle_get_auxiliary_type(aux_handle, &auxTypeC);
if (err.code) {
+ heif_image_release(aux_image);
heif_image_handle_release(aux_handle);
heif_image_handle_release(handle);
std::cerr << "Could not get type of auxiliary image: " << err.message << "\n";

@ -0,0 +1,141 @@
From 9598ddeb3dff4e51a9989067e912baf502410cee Mon Sep 17 00:00:00 2001
From: Heiko Lewin <hlewin@worldiety.de>
Date: Sun, 10 Mar 2024 13:32:18 +0100
Subject: [PATCH] encoder_kvazaar.cc: Fix some memory leaks
---
libheif/plugins/encoder_kvazaar.cc | 50 +++++++++++++-----------------
1 file changed, 22 insertions(+), 28 deletions(-)
diff --git a/libheif/plugins/encoder_kvazaar.cc b/libheif/plugins/encoder_kvazaar.cc
index eada77f9fe..158f174b04 100644
--- a/libheif/plugins/encoder_kvazaar.cc
+++ b/libheif/plugins/encoder_kvazaar.cc
@@ -361,6 +361,11 @@ static void copy_plane(kvz_pixel* out_p,
}
+template<typename T, typename D>
+std::unique_ptr<T, D> make_guard(T* ptr, D&& deleter) {
+ return std::unique_ptr<T, D>(ptr, deleter);
+}
+
static struct heif_error kvazaar_encode_image(void* encoder_raw, const struct heif_image* image,
heif_image_input_class input_class)
{
@@ -380,7 +385,8 @@ static struct heif_error kvazaar_encode_
return err;
}
- kvz_config* config = api->config_alloc();
+ auto uconfig = make_guard(api->config_alloc(), [api](kvz_config* cfg) { api->config_destroy(cfg); });
+ kvz_config* config = uconfig.get();
api->config_init(config); // param, encoder->preset.c_str(), encoder->tune.c_str());
#if HAVE_KVAZAAR_ENABLE_LOGGING
config->enable_logging_output = 0;
@@ -541,9 +547,9 @@ static struct heif_error kvazaar_encode_
}
*/
- kvz_picture* pic = api->picture_alloc_csp(kvzChroma, encoded_width, encoded_height);
+ auto upic = make_guard(api->picture_alloc_csp(kvzChroma, encoded_width, encoded_height), [api](kvz_picture* pic) { api->picture_free(pic); });
+ kvz_picture* pic = upic.get();
if (!pic) {
- api->config_destroy(config);
return heif_error{
heif_error_Encoder_plugin_error,
heif_suberror_Encoder_encoding,
@@ -573,11 +579,9 @@ static struct heif_error kvazaar_encode_
encoded_width >> chroma_stride_shift, encoded_height >> chroma_height_shift);
}
- kvz_encoder* kvzencoder = api->encoder_open(config);
+ auto uencoder = make_guard(api->encoder_open(config), [api](kvz_encoder* e) { api->encoder_close(e); });
+ kvz_encoder* kvzencoder = uencoder.get();
if (!kvzencoder) {
- api->picture_free(pic);
- api->config_destroy(config);
-
return heif_error{
heif_error_Encoder_plugin_error,
heif_suberror_Encoder_encoding,
@@ -586,14 +590,18 @@ static struct heif_error kvazaar_encode_
}
kvz_data_chunk* data = nullptr;
+ auto free_data = [api](kvz_data_chunk** data){
+ if(*data) {
+ api->chunk_free(*data);
+ *data = nullptr;
+ }
+ };
+ auto data_deleter = std::unique_ptr<kvz_data_chunk*, decltype(free_data)>(&data, free_data);
+
uint32_t data_len;
int success;
success = api->encoder_headers(kvzencoder, &data, &data_len);
if (!success) {
- api->picture_free(pic);
- api->config_destroy(config);
- api->encoder_close(kvzencoder);
-
return heif_error{
heif_error_Encoder_plugin_error,
heif_suberror_Encoder_encoding,
@@ -602,17 +610,13 @@ static struct heif_error kvazaar_encode_
}
append_chunk_data(data, encoder->output_data);
+ free_data(&data);
success = api->encoder_encode(kvzencoder,
pic,
&data, &data_len,
nullptr, nullptr, nullptr);
if (!success) {
- api->chunk_free(data);
- api->picture_free(pic);
- api->config_destroy(config);
- api->encoder_close(kvzencoder);
-
return heif_error{
heif_error_Encoder_plugin_error,
heif_suberror_Encoder_encoding,
@@ -621,6 +625,7 @@ static struct heif_error kvazaar_encode_
}
append_chunk_data(data, encoder->output_data);
+ free_data(&data);
for (;;) {
success = api->encoder_encode(kvzencoder,
@@ -628,11 +633,6 @@ static struct heif_error kvazaar_encode_
&data, &data_len,
nullptr, nullptr, nullptr);
if (!success) {
- api->chunk_free(data);
- api->picture_free(pic);
- api->config_destroy(config);
- api->encoder_close(kvzencoder);
-
return heif_error{
heif_error_Encoder_plugin_error,
heif_suberror_Encoder_encoding,
@@ -645,16 +645,10 @@ static struct heif_error kvazaar_encode_
}
append_chunk_data(data, encoder->output_data);
+ free_data(&data);
}
(void) success;
-
- api->chunk_free(data);
-
- api->encoder_close(kvzencoder);
- api->picture_free(pic);
- api->config_destroy(config);
-
return heif_error_ok;
}

@ -0,0 +1,22 @@
From a911b26a902c5f89fee2dc20ac4dfaafcb8144ec Mon Sep 17 00:00:00 2001
From: Andrey Semashev <Lastique@users.noreply.github.com>
Date: Fri, 15 Mar 2024 17:46:48 +0300
Subject: [PATCH] Fix compilation with libsvtav1 2.0.0.
---
libheif/plugins/encoder_svt.cc | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/libheif/plugins/encoder_svt.cc b/libheif/plugins/encoder_svt.cc
index 4597d7b8fc..1ff3bce2d5 100644
--- a/libheif/plugins/encoder_svt.cc
+++ b/libheif/plugins/encoder_svt.cc
@@ -646,7 +646,7 @@ struct heif_error svt_encode_image(void* encoder_raw, const struct heif_image* i
if (nclx) {
svt_config.color_description_present_flag = true;
-#if SVT_AV1_VERSION_MAJOR == 1
+#if SVT_AV1_VERSION_MAJOR >= 1
svt_config.color_primaries = static_cast<EbColorPrimaries>(nclx->color_primaries);
svt_config.transfer_characteristics = static_cast<EbTransferCharacteristics>(nclx->transfer_characteristics);
svt_config.matrix_coefficients = static_cast<EbMatrixCoefficients>(nclx->matrix_coefficients);

@ -0,0 +1,36 @@
From bef5f0f49f9024957189b5b465cd4d07078cd06f Mon Sep 17 00:00:00 2001
From: Brad Hards <bradh@frogmouth.net>
Date: Sat, 6 Jan 2024 13:59:21 +1100
Subject: [PATCH] kvazaar: protect against unexpected chroma values
Resolves #1089
---
libheif/plugins/encoder_kvazaar.cc | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/libheif/plugins/encoder_kvazaar.cc b/libheif/plugins/encoder_kvazaar.cc
index 408f1bf84d..eada77f9fe 100644
--- a/libheif/plugins/encoder_kvazaar.cc
+++ b/libheif/plugins/encoder_kvazaar.cc
@@ -35,6 +35,7 @@ extern "C" {
static const char* kError_unspecified_error = "Unspecified encoder error";
static const char* kError_unsupported_bit_depth = "Bit depth not supported by kvazaar";
+static const char* kError_unsupported_chroma = "Unsupported chroma type";
//static const char* kError_unsupported_image_size = "Images smaller than 16 pixels are not supported";
@@ -492,6 +493,13 @@ static struct heif_error kvazaar_encode_image(void* encoder_raw, const struct he
input_chroma_width = input_width;
input_chroma_height = input_height;
}
+ else {
+ return heif_error{
+ heif_error_Encoder_plugin_error,
+ heif_suberror_Unsupported_image_type,
+ kError_unsupported_chroma
+ };
+ }
if (chroma != heif_chroma_monochrome) {
int w = heif_image_get_width(image, heif_channel_Y);

@ -0,0 +1,22 @@
From dfd88deb1d80b4195ef16cddad256f33b46fbe29 Mon Sep 17 00:00:00 2001
From: Brad Hards <bradh@frogmouth.net>
Date: Wed, 17 Jan 2024 11:47:15 +1100
Subject: [PATCH] examples: fix leak in PNG decoder
This shows up with heif-enc (e.g. with --avif) under valgrind
---
examples/decoder_png.cc | 1 +
1 file changed, 1 insertion(+)
diff --git a/examples/decoder_png.cc b/examples/decoder_png.cc
index 5742f02653..c3eeed88a8 100644
--- a/examples/decoder_png.cc
+++ b/examples/decoder_png.cc
@@ -419,6 +419,7 @@ InputImage loadPNG(const char* filename, int output_bit_depth)
} // for
delete[] row_pointers;
+ fclose(fh);
input_image.image = std::shared_ptr<heif_image>(image,
[](heif_image* img) { heif_image_release(img); });

@ -0,0 +1,17 @@
diff -up libheif-1.16.2/tests/encode.cc.no-hevc libheif-1.16.2/tests/encode.cc
--- libheif-1.16.2/tests/encode.cc.no-hevc 2023-05-22 21:00:47.000000000 +0200
+++ libheif-1.16.2/tests/encode.cc 2023-09-08 14:22:08.408234336 +0200
@@ -148,11 +148,13 @@ static void test_ispe_size(heif_compress
TEST_CASE( "ispe odd size", "[heif_context]" ) {
+#if 0
// HEVC encoders typically encode with even dimensions only
test_ispe_size(heif_compression_HEVC, heif_orientation_normal, 121,99, 122,100);
test_ispe_size(heif_compression_HEVC, heif_orientation_rotate_180, 121,99, 122,100);
test_ispe_size(heif_compression_HEVC, heif_orientation_rotate_90_cw, 121,99, 122,100);
test_ispe_size(heif_compression_HEVC, heif_orientation_rotate_90_cw, 120,100, 120,100);
+#endif
// AVIF encoders typically encode with odd dimensions
test_ispe_size(heif_compression_AV1, heif_orientation_normal, 121,99, 121,99);

@ -3,14 +3,28 @@
# Unable to ship this in Fedora
%bcond_with hevc
%bcond_with check
Name: libheif
Version: 1.16.1
Version: 1.17.6
Release: 2%{?dist}
Summary: HEIF and AVIF file format decoder and encoder
License: LGPL-3.0-or-later and MIT
URL: https://github.com/strukturag/%{name}
URL: https://github.com/strukturag/libheif
Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz
Patch0: libheif-no-hevc-tests.patch
# Fix for CVE-2024-25269 (https://github.com/strukturag/libheif/issues/1073)
Patch1: https://github.com/strukturag/libheif/commit/877de6b398198bca387df791b9232922c5721c80.patch
# Fix compilation with libsvtav1 2.0.0.
Patch2: https://github.com/strukturag/libheif/commit/a911b26a902c5f89fee2dc20ac4dfaafcb8144ec.patch
# Backport memory leaks fix from master
Patch3: https://github.com/strukturag/libheif/commit/9598ddeb3dff4e51a9989067e912baf502410cee.patch
Patch4: https://github.com/strukturag/libheif/commit/dfd88deb1d80b4195ef16cddad256f33b46fbe29.patch
Patch5: https://github.com/strukturag/libheif/commit/90955e3118d687fa8c36747a7b349caebc82707d.patch
Patch6: https://github.com/strukturag/libheif/commit/bef5f0f49f9024957189b5b465cd4d07078cd06f.patch
Patch7: https://github.com/strukturag/libheif/commit/50aa08176e44178eeffcb7a66f37d7cad074f51b.patch
BuildRequires: cmake
BuildRequires: gcc-c++
@ -18,12 +32,11 @@ BuildRequires: ninja-build
BuildRequires: pkgconfig(aom)
BuildRequires: pkgconfig(dav1d)
BuildRequires: pkgconfig(libjpeg)
BuildRequires: pkgconfig(libopenjp2)
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))
BuildRequires: pkgconfig(SvtAv1Enc)
%endif
@ -38,8 +51,6 @@ file format decoder and encoder.
%dir %{_libdir}/%{name}
%if ! (0%{?rhel} && 0%{?rhel} <= 9)
%{_libdir}/%{name}/%{name}-rav1e.so
%endif
%if ! ((0%{?rhel} && 0%{?rhel} <= 9) || (0%{?fedora} && 0%{?fedora} < 38))
%{_libdir}/%{name}/%{name}-svtenc.so
%endif
@ -48,7 +59,7 @@ file format decoder and encoder.
%package -n heif-pixbuf-loader
Summary: HEIF image loader for GTK+ applications
BuildRequires: pkgconfig(gdk-pixbuf-2.0)
Requires: %{name}%{?_isa} = %{version}-%{release}
Requires: %{name}%{?_isa} = %{?epoch:%{epoch}:}%{version}-%{release}
Requires: gdk-pixbuf2%{?_isa}
%description -n heif-pixbuf-loader
@ -62,7 +73,7 @@ This package provides a plugin to load HEIF files in GTK+ applications.
%package tools
Summary: Tools for manipulating HEIF files
License: MIT
Requires: %{name}%{?_isa} = %{version}-%{release}
Requires: %{name}%{?_isa} = %{?epoch:%{epoch}:}%{version}-%{release}
Requires: shared-mime-info
%description tools
@ -95,7 +106,7 @@ that use %{name} to read HEIF image files.
%package devel
Summary: Development files for %{name}
Requires: %{name}%{?_isa} = %{version}-%{release}
Requires: %{name}%{?_isa} = %{?epoch:%{epoch}:}%{version}-%{release}
%description devel
The %{name}-devel package contains libraries and header files for
@ -111,7 +122,17 @@ developing applications that use %{name}.
%prep
%autosetup -p1
%setup -q
%if %{without hevc}
%patch 0 -p1
%endif
%patch 1 -p1
%patch 2 -p1
%patch 3 -p1
%patch 4 -p1
%patch 5 -p1
%patch 6 -p1
%patch 7 -p1
rm -rf third-party/
@ -119,6 +140,20 @@ rm -rf third-party/
%cmake \
-GNinja \
-DPLUGIN_DIRECTORY=%{_libdir}/%{name} \
-DWITH_DAV1D=ON \
-DWITH_DAV1D_PLUGIN=OFF \
-DWITH_JPEG_DECODER=ON \
-DWITH_JPEG_ENCODER=ON \
-DWITH_OpenJPEG_DECODER=ON \
-DWITH_OpenJPEG_DECODER_PLUGIN=OFF \
-DWITH_OpenJPEG_ENCODER=ON \
-DWITH_OpenJPEG_ENCODER_PLUGIN=OFF \
%if ! (0%{?rhel} && 0%{?rhel} <= 9)
-DWITH_RAV1E=ON \
-DWITH_SvtEnc=ON \
%endif
-DWITH_UNCOMPRESSED_CODEC=ON \
%{?with_check:-DBUILD_TESTING=ON -DWITH_REDUCED_VISIBILITY=OFF} \
%{?with_hevc:-DWITH_LIBDE265_PLUGIN:BOOL=ON -DWITH_X265_PLUGIN:BOOL=ON} \
-Wno-dev
@ -129,14 +164,54 @@ rm -rf third-party/
%cmake_install
%if %{with check}
%check
# Tests are not yet ported to CMake
#ctest
%ctest
%endif
%changelog
* Wed Nov 06 2024 Fabio Valentini <decathorpe@gmail.com> - 1.16.1-2
- Rebuild for dav1d 1.5.0
* Thu Dec 19 2024 Dmitriy Samoylik <samoylikdv@msvsphere-os.ru> - 1.17.6-2
- Rebuilt for MSVSphere 10
* Thu Jul 18 2024 Fedora Release Engineering <releng@fedoraproject.org> - 1.17.6-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild
* Sat Apr 13 2024 Robert-André Mauchin <zebob.m@gmail.com> - 1.17.6-`1
- Update to 1.17.6
- Security fix for CVE-2024-25269
- Close: rhbz#2255512
- Fix: rhbz#2267897
* Thu Jan 25 2024 Fedora Release Engineering <releng@fedoraproject.org> - 1.17.5-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
* Sun Jan 21 2024 Fedora Release Engineering <releng@fedoraproject.org> - 1.17.5-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
* Fri Jan 12 2024 Fabio Valentini <decathorpe@gmail.com> - 1.17.5-2
- Rebuild for dav1d 1.3.0
* Fri Dec 15 2023 Dominik Mierzejewski <dominik@greysector.net> - 1.17.5-2
- Update to 1.17.5 (rhbz#2244583)
- Backport fixes for: CVE-2023-49460 (rhbz#2253575, rhbz#2253576)
CVE-2023-49462 (rhbz#2253567, rhbz#2253568)
CVE-2023-49463 (rhbz#2253565, rhbz#2253566)
CVE-2023-49464 (rhbz#2253562, rhbz#2253563)
- Simplify conditionals for rav1e and svt-av1 encoders
- Enable JPEG2000 and dav1d decoders/encoders
* Fri Sep 08 2023 Dominik Mierzejewski <dominik@greysector.net> - 1.16.2-2
- Enable uncompressed codec (rhbz#2237849)
- Run tests conditionally (requires making all symbols visible)
- Disable HEVC tests when building without HEVC codec
* Fri Jul 28 2023 Orion Poplawski <orion@nwra.com> - 1.16.2-1
- Update to 1.16.2
* Thu Jul 20 2023 Fedora Release Engineering <releng@fedoraproject.org> - 1.16.1-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
* Fri May 05 2023 Neal Gompa <ngompa@fedoraproject.org> - 1.16.1-1
- Update to 1.16.1

@ -1 +0,0 @@
SHA512 (libheif-1.16.1.tar.gz) = d81f841ac63d58f56414bf8d799a12af0c846148d2c245cd0c0cc3133edd0b3e08e5018efbc82b83fbab00209a6e0806133f63283bf7244cc4e9cf37b4fa8110
Loading…
Cancel
Save