From ea22f87529b96feda4fad0e6b8b726b49e03fd79 Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Fri, 27 Dec 2024 13:04:18 +1100 Subject: [PATCH] Destroy image on failure --- src/_avif.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/_avif.c b/src/_avif.c index 847bb6afb12..ebce7957a88 100644 --- a/src/_avif.c +++ b/src/_avif.c @@ -308,6 +308,7 @@ AvifEncoderNew(PyObject *self_, PyObject *args) { // Validate canvas dimensions if (width <= 0 || height <= 0) { PyErr_SetString(PyExc_ValueError, "invalid canvas dimensions"); + avifImageDestroy(image); return NULL; } image->width = width; @@ -359,6 +360,7 @@ AvifEncoderNew(PyObject *self_, PyObject *args) { if (advanced != Py_None) { #if AVIF_VERSION >= 80200 if (_add_codec_specific_options(encoder, advanced)) { + avifImageDestroy(image); avifEncoderDestroy(encoder); return NULL; } @@ -366,6 +368,7 @@ AvifEncoderNew(PyObject *self_, PyObject *args) { PyErr_SetString( PyExc_ValueError, "Advanced codec options require libavif >= 0.8.2" ); + avifImageDestroy(image); avifEncoderDestroy(encoder); return NULL; #endif @@ -374,6 +377,7 @@ AvifEncoderNew(PyObject *self_, PyObject *args) { self = PyObject_New(AvifEncoderObject, &AvifEncoder_Type); if (!self) { PyErr_SetString(PyExc_RuntimeError, "could not create encoder object"); + avifImageDestroy(image); avifEncoderDestroy(encoder); return NULL; } @@ -397,6 +401,7 @@ AvifEncoderNew(PyObject *self_, PyObject *args) { "Setting ICC profile failed: %s", avifResultToString(result) ); + avifImageDestroy(image); avifEncoderDestroy(encoder); return NULL; } @@ -420,6 +425,7 @@ AvifEncoderNew(PyObject *self_, PyObject *args) { "Setting EXIF data failed: %s", avifResultToString(result) ); + avifImageDestroy(image); avifEncoderDestroy(encoder); return NULL; } @@ -437,6 +443,7 @@ AvifEncoderNew(PyObject *self_, PyObject *args) { "Setting XMP data failed: %s", avifResultToString(result) ); + avifImageDestroy(image); avifEncoderDestroy(encoder); return NULL; }