Commit 322dd22c for libheif
commit 322dd22c97af6552f1aa48d030a60c1dce9f57a8
Author: Dirk Farin <dirk.farin@gmail.com>
Date: Sat Apr 11 23:48:19 2026 +0200
jpeg: check valid BPP before initializing jpeg_compress_struct
diff --git a/libheif/plugins/encoder_jpeg.cc b/libheif/plugins/encoder_jpeg.cc
index 7dde0e43..2376d6b9 100644
--- a/libheif/plugins/encoder_jpeg.cc
+++ b/libheif/plugins/encoder_jpeg.cc
@@ -344,7 +344,11 @@ heif_error jpeg_encode_image(void* encoder_raw, const heif_image* image,
auto* encoder = (encoder_struct_jpeg*) encoder_raw;
- jpeg_compress_struct cinfo;
+ if (heif_image_get_bits_per_pixel(image, heif_channel_Y) != 8) {
+ return heif_error{heif_error_Encoding_error, heif_suberror_Encoder_encoding, "Cannot write JPEG image with >8 bpp."};
+ }
+
+ jpeg_compress_struct cinfo{};
ErrorHandler jerr;
cinfo.err = jpeg_std_error(reinterpret_cast<jpeg_error_mgr*>(&jerr));
jerr.pub.error_exit = &OnJpegError;
@@ -354,11 +358,6 @@ heif_error jpeg_encode_image(void* encoder_raw, const heif_image* image,
return heif_error{heif_error_Encoding_error, heif_suberror_Encoder_encoding, "JPEG encoding error"};
}
- if (heif_image_get_bits_per_pixel(image, heif_channel_Y) != 8) {
- jpeg_destroy_compress(&cinfo);
- return heif_error{heif_error_Encoding_error, heif_suberror_Encoder_encoding, "Cannot write JPEG image with >8 bpp."};
- }
-
uint8_t* outbuffer = nullptr;
#if defined(LIBJPEG_TURBO_VERSION) || (JPEG_LIB_VERSION_MAJOR < 9 || (JPEG_LIB_VERSION_MAJOR == 9 && JPEG_LIB_VERSION_MINOR < 4))
unsigned long outlength = 0;