From b0bf26431f5e4fb6bb2cb5ae3501fd57a10d15c2 Mon Sep 17 00:00:00 2001 From: Thomas White Date: Fri, 6 May 2022 12:01:21 +0200 Subject: Fix horrific Seedee memory leak --- libcrystfel/src/image-seedee.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/libcrystfel/src/image-seedee.c b/libcrystfel/src/image-seedee.c index 1965aefa..537fc9e3 100644 --- a/libcrystfel/src/image-seedee.c +++ b/libcrystfel/src/image-seedee.c @@ -135,12 +135,16 @@ int image_seedee_read(struct image *image, array.shape = malloc(array.ndims*sizeof(int)); if ( (array.data == NULL) || (array.shape == NULL) ) { cJSON_Delete(json); + free(array.data); + free(array.shape); return 1; } if ( array.ndims != 2 ) { ERROR("Seedee data has unexpected number of dimensions " "(%i, expected 2)\n", array.ndims); + free(array.data); + free(array.shape); return 1; } @@ -152,12 +156,16 @@ int image_seedee_read(struct image *image, cJSON_Delete(json); if ( r < 0 ) { ERROR("Seedee deserialiation failed.\n"); + free(array.data); + free(array.shape); return 1; } image->dp = malloc(dtempl->n_panels*sizeof(float *)); if ( image->dp == NULL ) { ERROR("Failed to allocate data array.\n"); + free(array.data); + free(array.shape); return 1; } @@ -171,11 +179,16 @@ int image_seedee_read(struct image *image, ERROR("Failed to load data for panel '%s'\n", dtempl->panels[i].name); profile_end("seedee-panel"); + free(array.data); + free(array.shape); return 1; } } profile_end("seedee-panel"); + free(array.data); + free(array.shape); + return 0; } -- cgit v1.2.3