HEIF: keep reader callback table alive

libheif retains the heif_reader pointer after
heif_context_read_from_reader returns. The callback table was scoped
to the non-sequential branch and could be destroyed before
tiled image decoding used it from worker threads.

Give the callback table static storage duration.

BUG: 523105
This commit is contained in:
Kyle Alexander Buan
2026-07-16 15:33:49 +08:00
committed by Daniel Novomeský
parent 2faf524b85
commit ad0fb9dde4

View File

@@ -845,7 +845,8 @@ bool HEIFHandler::ensureDecoder()
buffer = deviceRead(dev, kMaxQVectorSize);
err = heif_context_read_from_memory(ctx, static_cast<const void *>(buffer.constData()), buffer.size(), nullptr);
} else {
heif_reader reader = create_heif_reader_for_qiodevice();
// Must not be destroyed until decoding ends
static const heif_reader reader = create_heif_reader_for_qiodevice();
err = heif_context_read_from_reader(ctx, &reader, dev, nullptr);
}
if (err.code) {