Commit 7dd40481 for libheif
commit 7dd40481fdf57a2c72023a92659fe504483c0825
Author: Dirk Farin <dirk.farin@gmail.com>
Date: Fri Apr 10 23:17:59 2026 +0200
Fix reading uninitialized value in x265 encoder when no NALs are produced
diff --git a/libheif/plugins/encoder_x265.cc b/libheif/plugins/encoder_x265.cc
index 1c35c0a4..88538c26 100644
--- a/libheif/plugins/encoder_x265.cc
+++ b/libheif/plugins/encoder_x265.cc
@@ -1114,7 +1114,10 @@ static heif_error x265_encode_sequence_frame(void* encoder_raw, const heif_image
&num_nals,
pic,
&out_pic);
- uintptr_t frameNr = reinterpret_cast<uintptr_t>(out_pic->userData);
+ if (num_nals > 0 && out_pic) {
+ uintptr_t frameNr = reinterpret_cast<uintptr_t>(out_pic->userData);
+ encoder->append_nal_packets(nals, num_nals, frameNr);
+ }
#else
x265_picture out_pic;
api->encoder_encode(encoder->encoder,
@@ -1123,13 +1126,11 @@ static heif_error x265_encode_sequence_frame(void* encoder_raw, const heif_image
pic,
&out_pic);
- uintptr_t frameNr = reinterpret_cast<uintptr_t>(out_pic.userData);
- for (uint32_t i = 0; i < num_nals; i++) {
- //std::cout << " dequeue frame " << encoder->out_frameNr << ": " << naltype(encoder->nals[i].type) << "\n";
+ if (num_nals > 0) {
+ uintptr_t frameNr = reinterpret_cast<uintptr_t>(out_pic.userData);
+ encoder->append_nal_packets(nals, num_nals, frameNr);
}
- encoder->append_nal_packets(nals, num_nals, frameNr);
-
#endif
api->picture_free(pic);
@@ -1154,7 +1155,6 @@ static heif_error x265_end_sequence_encoding(void* encoder_raw)
&num_nals,
NULL,
&out_pic);
- uintptr_t frameNr = reinterpret_cast<uintptr_t>(out_pic->userData);
#else
x265_picture out_pic;
int result = api->encoder_encode(encoder->encoder,
@@ -1162,20 +1162,16 @@ static heif_error x265_end_sequence_encoding(void* encoder_raw)
&num_nals,
NULL,
&out_pic);
- uintptr_t frameNr = reinterpret_cast<uintptr_t>(out_pic.userData);
-
- for (uint32_t i = 0; i < num_nals; i++) {
- //std::cout << "EOS flush, frame " << encoder->out_frameNr << ": " << naltype(encoder->nals[i].type) << "\n";
- }
#endif
- if (result <= 0) {
- // TODO: do we need this ?
- //*data = nullptr;
- //*size = 0;
-
- return heif_error_ok; // ?
+ if (result <= 0 || num_nals == 0) {
+ return heif_error_ok;
}
+#if X265_BUILD == 212
+ uintptr_t frameNr = out_pic ? reinterpret_cast<uintptr_t>(out_pic->userData) : 0;
+#else
+ uintptr_t frameNr = reinterpret_cast<uintptr_t>(out_pic.userData);
+#endif
encoder->append_nal_packets(nals, num_nals, frameNr);
encoder->api->param_free(encoder->param);