Commit c9adb702 for libheif

commit c9adb7023909c98db035496de8ccb2ef0f633595
Author: Dirk Farin <dirk.farin@gmail.com>
Date:   Thu Feb 26 20:32:25 2026 +0100

    check error returned by plugin get_compressed_data() calls

diff --git a/libheif/codecs/avc_enc.cc b/libheif/codecs/avc_enc.cc
index b985af76..1e6973fe 100644
--- a/libheif/codecs/avc_enc.cc
+++ b/libheif/codecs/avc_enc.cc
@@ -56,7 +56,10 @@ Result<Encoder::CodedImageData> Encoder_AVC::encode(const std::shared_ptr<HeifPi
     uint8_t* data;
     int size;

-    encoder->plugin->get_compressed_data(encoder->encoder, &data, &size, nullptr);
+    err = encoder->plugin->get_compressed_data(encoder->encoder, &data, &size, nullptr);
+    if (err.code) {
+      return Error(err.code, err.subcode, err.message);
+    }

     if (data == nullptr) {
       break;
@@ -193,7 +196,10 @@ Error Encoder_AVC::get_data(heif_encoder* encoder)

     uintptr_t frameNr=0;
     int more_frame_packets = 1;
-    encoder->plugin->get_compressed_data2(encoder->encoder, &data, &size, &frameNr, nullptr, &more_frame_packets);
+    struct heif_error err = encoder->plugin->get_compressed_data2(encoder->encoder, &data, &size, &frameNr, nullptr, &more_frame_packets);
+    if (err.code) {
+      return Error(err.code, err.subcode, err.message);
+    }

     if (data == nullptr) {
       break;
diff --git a/libheif/codecs/avif_enc.cc b/libheif/codecs/avif_enc.cc
index b47664d0..800494e9 100644
--- a/libheif/codecs/avif_enc.cc
+++ b/libheif/codecs/avif_enc.cc
@@ -59,7 +59,10 @@ Result<Encoder::CodedImageData> Encoder_AVIF::encode(const std::shared_ptr<HeifP
     uint8_t* data;
     int size;

-    encoder->plugin->get_compressed_data(encoder->encoder, &data, &size, nullptr);
+    err = encoder->plugin->get_compressed_data(encoder->encoder, &data, &size, nullptr);
+    if (err.code) {
+      return Error(err.code, err.subcode, err.message);
+    }

     bool found_config = fill_av1C_configuration_from_stream(&config, data, size);
     (void) found_config;
@@ -140,7 +143,10 @@ Error Encoder_AVIF::get_data(heif_encoder* encoder)

     uintptr_t out_frame_number;
     int is_keyframe = 0;
-    encoder->plugin->get_compressed_data2(encoder->encoder, &data, &size, &out_frame_number, &is_keyframe, nullptr);
+    struct heif_error err = encoder->plugin->get_compressed_data2(encoder->encoder, &data, &size, &out_frame_number, &is_keyframe, nullptr);
+    if (err.code) {
+      return Error(err.code, err.subcode, err.message);
+    }

     if (data == nullptr) {
       break;
diff --git a/libheif/codecs/hevc_enc.cc b/libheif/codecs/hevc_enc.cc
index ada5b89d..e06c282a 100644
--- a/libheif/codecs/hevc_enc.cc
+++ b/libheif/codecs/hevc_enc.cc
@@ -56,7 +56,10 @@ Result<Encoder::CodedImageData> Encoder_HEVC::encode(const std::shared_ptr<HeifP
     uint8_t* data;
     int size;

-    encoder->plugin->get_compressed_data(encoder->encoder, &data, &size, nullptr);
+    err = encoder->plugin->get_compressed_data(encoder->encoder, &data, &size, nullptr);
+    if (err.code) {
+      return Error(err.code, err.subcode, err.message);
+    }

     if (data == nullptr) {
       break;
@@ -184,7 +187,10 @@ Error Encoder_HEVC::get_data(heif_encoder* encoder)

     uintptr_t frameNr=0;
     int more_frame_packets = 1;
-    encoder->plugin->get_compressed_data2(encoder->encoder, &data, &size, &frameNr, nullptr, &more_frame_packets);
+    struct heif_error err = encoder->plugin->get_compressed_data2(encoder->encoder, &data, &size, &frameNr, nullptr, &more_frame_packets);
+    if (err.code) {
+      return Error(err.code, err.subcode, err.message);
+    }

     if (data == nullptr) {
       break;
diff --git a/libheif/codecs/jpeg_enc.cc b/libheif/codecs/jpeg_enc.cc
index 5e5cf022..8b1bd31b 100644
--- a/libheif/codecs/jpeg_enc.cc
+++ b/libheif/codecs/jpeg_enc.cc
@@ -70,7 +70,10 @@ Result<Encoder::CodedImageData> Encoder_JPEG::encode(const std::shared_ptr<HeifP
     uint8_t* data;
     int size;

-    encoder->plugin->get_compressed_data(encoder->encoder, &data, &size, nullptr);
+    err = encoder->plugin->get_compressed_data(encoder->encoder, &data, &size, nullptr);
+    if (err.code) {
+      return Error(err.code, err.subcode, err.message);
+    }

     if (data == nullptr) {
       break;
diff --git a/libheif/codecs/vvc_enc.cc b/libheif/codecs/vvc_enc.cc
index db21faf1..35bed60e 100644
--- a/libheif/codecs/vvc_enc.cc
+++ b/libheif/codecs/vvc_enc.cc
@@ -57,7 +57,10 @@ Result<Encoder::CodedImageData> Encoder_VVC::encode(const std::shared_ptr<HeifPi
     uint8_t* data;
     int size;

-    encoder->plugin->get_compressed_data(encoder->encoder, &data, &size, NULL);
+    err = encoder->plugin->get_compressed_data(encoder->encoder, &data, &size, NULL);
+    if (err.code) {
+      return Error(err.code, err.subcode, err.message);
+    }

     if (data == NULL) {
       break;
@@ -187,7 +190,10 @@ Error Encoder_VVC::get_data(heif_encoder* encoder)

     uintptr_t frameNr=0;
     int more_frame_packets = 1;
-    encoder->plugin->get_compressed_data2(encoder->encoder, &data, &size, &frameNr, nullptr, &more_frame_packets);
+    struct heif_error err = encoder->plugin->get_compressed_data2(encoder->encoder, &data, &size, &frameNr, nullptr, &more_frame_packets);
+    if (err.code) {
+      return Error(err.code, err.subcode, err.message);
+    }

     if (data == nullptr) {
       break;