From 35efa0780f864b5bab6949041d6281dd2d3d61ce Mon Sep 17 00:00:00 2001 From: Bastian Dehn Date: Thu, 26 Mar 2026 16:29:07 +0100 Subject: [PATCH] fix max options by mask --- src/kds_s2000w_option_descriptors.c | 7 ++++++- tests/kds_s2000w_net_get_opt_tests.c | 7 +------ tests/kds_s2000w_net_set_opt_tests.c | 7 +------ tests/kds_s2000w_option_descriptor_tests.c | 14 ++------------ 4 files changed, 10 insertions(+), 25 deletions(-) diff --git a/src/kds_s2000w_option_descriptors.c b/src/kds_s2000w_option_descriptors.c index 835f8b5..e819178 100644 --- a/src/kds_s2000w_option_descriptors.c +++ b/src/kds_s2000w_option_descriptors.c @@ -4,6 +4,7 @@ #include "kds_s2000w_option_descriptors.h" #define BITS16 16 +#define MAX_AVAILABLE_OPTIONS 48 typedef option_descriptor_t* (*descriptor_fn)(mask_option_t* mask); typedef struct { @@ -1488,7 +1489,11 @@ SANE_Status _kds_s2000w_option_descriptor_init_profile(descriptor_fn* fn, size_t if (kds_s2000w_option_descriptors == NULL) return SANE_STATUS_NO_MEM; - kds_s2000w_option_descriptors->size = _kds_s2000w_option_descriptor_option_count_from_mask(mask);; + kds_s2000w_option_descriptors->size = MAX_AVAILABLE_OPTIONS; + size_t available_options = _kds_s2000w_option_descriptor_option_count_from_mask(mask); + if (available_options < MAX_AVAILABLE_OPTIONS) + kds_s2000w_option_descriptors->size = available_options; + kds_s2000w_option_descriptors->descriptors = malloc(sizeof(option_descriptor_t*) * kds_s2000w_option_descriptors->size); if (kds_s2000w_option_descriptors->descriptors == NULL) { free(kds_s2000w_option_descriptors); diff --git a/tests/kds_s2000w_net_get_opt_tests.c b/tests/kds_s2000w_net_get_opt_tests.c index d11fd25..6532e22 100644 --- a/tests/kds_s2000w_net_get_opt_tests.c +++ b/tests/kds_s2000w_net_get_opt_tests.c @@ -22,12 +22,7 @@ int setup(void** state) if (mask == NULL) return 1; - mask->standard_group = 0xf; - mask->geometry_group = 0x3f; - mask->boldness_smoothing_group = 0xf; - mask->boldness_color_group = 0x1fff; - mask->image_processing_group = 0x7f; - mask->feeder_group = 0x7f; + memset(mask, 0xff, sizeof(mask_option_t)); kds_s2000w_option_descriptors_init(mask); free(mask); mask = NULL; diff --git a/tests/kds_s2000w_net_set_opt_tests.c b/tests/kds_s2000w_net_set_opt_tests.c index 7dbab62..6ef593c 100644 --- a/tests/kds_s2000w_net_set_opt_tests.c +++ b/tests/kds_s2000w_net_set_opt_tests.c @@ -17,12 +17,7 @@ int setup(void** state) if (mask == NULL) return 1; - mask->standard_group = 0xf; - mask->geometry_group = 0x3f; - mask->boldness_smoothing_group = 0xf; - mask->boldness_color_group = 0x1fff; - mask->image_processing_group = 0x7f; - mask->feeder_group = 0x7f; + memset(mask, 0xff, sizeof(mask_option_t)); kds_s2000w_option_descriptors_init(mask); free(mask); mask = NULL; diff --git a/tests/kds_s2000w_option_descriptor_tests.c b/tests/kds_s2000w_option_descriptor_tests.c index e928a6c..fc473bc 100644 --- a/tests/kds_s2000w_option_descriptor_tests.c +++ b/tests/kds_s2000w_option_descriptor_tests.c @@ -17,12 +17,7 @@ void _kds_s2000w_option_init_descriptor_no_mem(int16_t no_mem_count) if (mask == NULL) return; - mask->standard_group = 0xf; - mask->geometry_group = 0x3f; - mask->boldness_smoothing_group = 0xf; - mask->boldness_color_group = 0x1fff; - mask->image_processing_group = 0x7f; - mask->feeder_group = 0x7f; + memset(mask, 0xff, sizeof(mask_option_t)); SANE_Status status = kds_s2000w_option_descriptors_init(mask); free(mask); mask = NULL; @@ -36,12 +31,7 @@ int setup(void** state) if (mask == NULL) return 1; - mask->standard_group = 0xf; - mask->geometry_group = 0x3f; - mask->boldness_smoothing_group = 0xf; - mask->boldness_color_group = 0x1fff; - mask->image_processing_group = 0x7f; - mask->feeder_group = 0x7f; + memset(mask, 0xff, sizeof(mask_option_t)); SANE_Status status = kds_s2000w_option_descriptors_init(mask); free(mask); mask = NULL; -- 2.47.3