Commit 64b0662f for libheif
commit 64b0662f5b019ea582080f11cda309ffc97eac47
Author: Dirk Farin <dirk.farin@gmail.com>
Date: Wed Apr 29 20:46:59 2026 +0200
fix cyclic references check
diff --git a/libheif/image-items/image_item.cc b/libheif/image-items/image_item.cc
index ddad85cf..95059512 100644
--- a/libheif/image-items/image_item.cc
+++ b/libheif/image-items/image_item.cc
@@ -710,12 +710,14 @@ Result<std::shared_ptr<HeifPixelImage>> ImageItem::decode_image(const heif_decod
// Check for cycles before taking m_decode_mutex: a derived item that
// (transitively) references itself would otherwise re-enter decode_image()
// on the same ImageItem and self-deadlock on the non-recursive mutex.
+ // The matching insert lives inside decode_compressed_image() of derived
+ // items (grid/overlay/iden), so the current item is in processed_ids only
+ // when called from one of its own descendants.
if (processed_ids.contains(m_id)) {
return Error{heif_error_Invalid_input,
heif_suberror_Unspecified,
"'iref' has cyclic references"};
}
- processed_ids.insert(m_id);
std::lock_guard<std::mutex> lock(m_decode_mutex);