From: Bastian Dehn Date: Sat, 11 Oct 2025 09:45:31 +0000 (+0200) Subject: validate option descriptors X-Git-Tag: v1.1.10^2~13 X-Git-Url: https://gitweb.hhaalo.de/?a=commitdiff_plain;h=673efc787cd022f8c3df284e7f5b1f9efd47fe47;p=sane-kds-s2000w-net.git validate option descriptors --- diff --git a/src/kds_s2000w_option_descriptors.c b/src/kds_s2000w_option_descriptors.c index 4e921ae..3b948eb 100644 --- a/src/kds_s2000w_option_descriptors.c +++ b/src/kds_s2000w_option_descriptors.c @@ -13,6 +13,15 @@ uint8_t max_option_count = 0; void _kds_s2000w_option_descriptor_descriptor_free(option_descriptor* descriptor) { + if (descriptor == NULL) + return; + + if (descriptor->descriptor == NULL) { + free(descriptor); + descriptor = NULL; + return; + } + if (descriptor->descriptor->constraint_type == SANE_CONSTRAINT_STRING_LIST) { free((void*) descriptor->descriptor->constraint.string_list); descriptor->descriptor->constraint.string_list = NULL; @@ -34,6 +43,21 @@ void _kds_s2000w_option_descriptor_descriptor_free(option_descriptor* descriptor descriptor = NULL; } +SANE_Status _kds_s2000w_option_descriptor_validate() +{ + if (descriptors == NULL) + return SANE_STATUS_NO_MEM; + + for (int i = 0; i < max_option_count; i++) { + if (descriptors[i]->descriptor == NULL) { + kds_s2000w_option_descriptors_free(); + return SANE_STATUS_NO_MEM; + } + } + + return SANE_STATUS_GOOD; +} + SANE_Option_Descriptor* _kds_s2000w_option_descriptor_num_options() { kds_s2000w_debug_printf(ALL, "kds_s2000w_option_descriptor_num_options"); @@ -1534,7 +1558,7 @@ SANE_Status _kds_s2000w_option_descriptors_init_min_profile() descriptors[11]->config_name = AUTOSTART; descriptors[11]->descriptor = _kds_s2000w_option_descriptor_autostart(); - return SANE_STATUS_GOOD; + return _kds_s2000w_option_descriptor_validate(); } SANE_Status _kds_s2000w_option_descriptors_init_230802_v1_0_36_profile() @@ -1607,7 +1631,7 @@ SANE_Status _kds_s2000w_option_descriptors_init_230802_v1_0_36_profile() descriptors[25]->config_name = AUTOSTART; descriptors[25]->descriptor = _kds_s2000w_option_descriptor_autostart(); - return SANE_STATUS_GOOD; + return _kds_s2000w_option_descriptor_validate(); } SANE_Status _kds_s2000w_option_descriptors_init_full_profile() @@ -1724,7 +1748,7 @@ SANE_Status _kds_s2000w_option_descriptors_init_full_profile() descriptors[47]->config_name = DOCUMENT_FEEDER_TIMEOUT_RESPONSE; descriptors[47]->descriptor = _kds_s2000w_option_descriptor_document_feeder_timeout_response(); - return SANE_STATUS_GOOD; + return _kds_s2000w_option_descriptor_validate(); } /******************************************************************************* @@ -1753,6 +1777,9 @@ void kds_s2000w_option_descriptors_free() { kds_s2000w_debug_printf(ALL, "kds_s2000w_option_descriptors_free"); + if (descriptors == NULL) + return; + for (int i = 0; i < max_option_count; i++) { _kds_s2000w_option_descriptor_descriptor_free(descriptors[i]); descriptors[i] = NULL;