Merge pull request #24438 from vrabaud:avif_check

Check the return value of avifDecoderSetIOMemory.
pull/24441/head
Alexander Smorkalov 2 years ago committed by GitHub
commit 3429c27477
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 26
      modules/imgcodecs/src/grfmt_avif.cpp

@ -147,18 +147,6 @@ AvifDecoder::~AvifDecoder() {
size_t AvifDecoder::signatureLength() const { return kAvifSignatureSize; }
bool AvifDecoder::checkSignature(const String &signature) const {
avifDecoder *decoder = avifDecoderCreate();
if (!decoder) return false;
avifDecoderSetIOMemory(decoder,
reinterpret_cast<const uint8_t *>(signature.c_str()),
signature.size());
decoder->io->sizeHint = 1e9;
const avifResult status = avifDecoderParse(decoder);
avifDecoderDestroy(decoder);
return (status == AVIF_RESULT_OK || status == AVIF_RESULT_TRUNCATED_DATA);
}
#define OPENCV_AVIF_CHECK_STATUS(X, ENCDEC) \
{ \
const avifResult status = (X); \
@ -170,6 +158,20 @@ bool AvifDecoder::checkSignature(const String &signature) const {
} \
}
bool AvifDecoder::checkSignature(const String &signature) const {
avifDecoder *decoder = avifDecoderCreate();
if (!decoder) return false;
OPENCV_AVIF_CHECK_STATUS(
avifDecoderSetIOMemory(
decoder, reinterpret_cast<const uint8_t *>(signature.c_str()),
signature.size()),
decoder);
decoder->io->sizeHint = 1e9;
const avifResult status = avifDecoderParse(decoder);
avifDecoderDestroy(decoder);
return (status == AVIF_RESULT_OK || status == AVIF_RESULT_TRUNCATED_DATA);
}
ImageDecoder AvifDecoder::newDecoder() const { return makePtr<AvifDecoder>(); }
bool AvifDecoder::readHeader() {

Loading…
Cancel
Save