From: Bastian Dehn Date: Sun, 2 Mar 2025 07:00:00 +0000 (+0100) Subject: fix memory leak get device list X-Git-Tag: v1.1.1^2~2 X-Git-Url: https://gitweb.hhaalo.de/?a=commitdiff_plain;h=92190419945ff3fc48d7ecaa349f3bdfd30a78a4;p=sane-kds-s2000w-net.git fix memory leak get device list --- diff --git a/src/kds_s2000w_net.c b/src/kds_s2000w_net.c index 64c3260..67936df 100644 --- a/src/kds_s2000w_net.c +++ b/src/kds_s2000w_net.c @@ -10,8 +10,7 @@ #define MODEL "Kodak Alaris s2000w series" #define TYPE "sheetfed scanner" -SANE_Device* device_info_ptr; -SANE_Device device_info; +SANE_Device** device_info_ptr = NULL; SANE_Status sane_kds_s2000w_net_init(SANE_Int* version_code, SANE_Auth_Callback authorize) { @@ -25,6 +24,11 @@ SANE_Status sane_kds_s2000w_net_init(SANE_Int* version_code, SANE_Auth_Callback void sane_kds_s2000w_net_exit(void) { kds_s2000w_debug_printf(ALL, "sane_kds_s2000w_net_exit"); + + free(device_info_ptr[0]); + device_info_ptr[0] = NULL; + free(device_info_ptr); + device_info_ptr = NULL; } SANE_Status sane_kds_s2000w_net_get_devices(SANE_Device*** device_list, @@ -35,12 +39,17 @@ SANE_Status sane_kds_s2000w_net_get_devices(SANE_Device*** device_list, if (local_only) return SANE_STATUS_NO_MEM; - device_info.name = NAME; - device_info.vendor = VENDOR; - device_info.model = MODEL; - device_info.type = TYPE; - device_info_ptr = &device_info; - *device_list = &device_info_ptr; + if (device_info_ptr == NULL) { + device_info_ptr = malloc(sizeof(SANE_Device*) * 2); + device_info_ptr[0] = malloc(sizeof(SANE_Device)); + } + + device_info_ptr[0]->name = NAME; + device_info_ptr[0]->vendor = VENDOR; + device_info_ptr[0]->model = MODEL; + device_info_ptr[0]->type = TYPE; + device_info_ptr[1] = NULL; + *device_list = device_info_ptr; return SANE_STATUS_GOOD; } diff --git a/tests/kds_s2000w_net_tests.c b/tests/kds_s2000w_net_tests.c index 48a4ef7..ea9052a 100644 --- a/tests/kds_s2000w_net_tests.c +++ b/tests/kds_s2000w_net_tests.c @@ -30,6 +30,7 @@ void kds_s2000w_net_get_devices_test() assert_string_equal(device_list[0][0]->vendor, "Kodak"); assert_string_equal(device_list[0][0]->model, "Kodak Alaris s2000w series"); assert_string_equal(device_list[0][0]->type, "sheetfed scanner"); + assert_null(device_list[0][1]); free(device_list); device_list = NULL;