From 73bf5533f97846d94034df809cfe6c6a5ff7d295 Mon Sep 17 00:00:00 2001 From: Thierry HUCHARD Date: Fri, 8 May 2020 08:35:50 +0200 Subject: [PATCH] release memory and close descriptor. --- backend/escl/escl_capabilities.c | 6 ++++-- backend/escl/escl_jpeg.c | 1 - backend/escl/escl_scan.c | 6 ++++++ 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/backend/escl/escl_capabilities.c b/backend/escl/escl_capabilities.c index 154693c88..fdd5cfe83 100644 --- a/backend/escl/escl_capabilities.c +++ b/backend/escl/escl_capabilities.c @@ -141,7 +141,7 @@ memory_callback_c(void *contents, size_t size, size_t nmemb, void *userp) char *str = realloc(mem->memory, mem->size + realsize + 1); if (str == NULL) { - fprintf(stderr, "not enough memory (realloc returned NULL)\n"); + DBG(10, "not enough memory (realloc returned NULL)\n"); return (0); } mem->memory = str; @@ -442,6 +442,8 @@ clean_data: xmlCleanupParser(); xmlMemoryDump(); curl_easy_cleanup(curl_handle); - free(var->memory); + if (var) + free(var->memory); + free(var); return (scanner); } diff --git a/backend/escl/escl_jpeg.c b/backend/escl/escl_jpeg.c index c0042a2dd..8d6b6b636 100644 --- a/backend/escl/escl_jpeg.c +++ b/backend/escl/escl_jpeg.c @@ -120,7 +120,6 @@ jpeg_RW_src(j_decompress_ptr cinfo, FILE *ctx) if (cinfo->src == NULL) { cinfo->src = (struct jpeg_source_mgr *)(*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT, sizeof(my_source_mgr)); - src = (my_source_mgr *) cinfo->src; } src = (my_source_mgr *) cinfo->src; src->pub.init_source = init_source; diff --git a/backend/escl/escl_scan.c b/backend/escl/escl_scan.c index 410b0dbc5..9a8c24029 100644 --- a/backend/escl/escl_scan.c +++ b/backend/escl/escl_scan.c @@ -74,18 +74,24 @@ escl_scan(capabilities_t *scanner, const ESCL_Device *device, char *result) scan_jobs, result, scanner_start); escl_curl_url(curl_handle, device, scan_cmd); curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, write_callback); + if (scanner->tmp) + fclose(scanner->tmp); scanner->tmp = tmpfile(); if (scanner->tmp != NULL) { curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, scanner->tmp); CURLcode res = curl_easy_perform(curl_handle); if (res != CURLE_OK) { DBG( 1, "Unable to scan: %s\n", curl_easy_strerror(res)); + fclose(scanner->tmp); + scanner->tmp = NULL; status = SANE_STATUS_INVAL; + goto cleanup; } fseek(scanner->tmp, 0, SEEK_SET); } else status = SANE_STATUS_NO_MEM; +cleanup: curl_easy_cleanup(curl_handle); } DBG(10, "eSCL scan : %s\n", sane_strstatus(status));