From 3f9eb8220322ec4661c7b84a70a8045e95ab4328 Mon Sep 17 00:00:00 2001 From: Bastian Dehn Date: Tue, 7 Oct 2025 22:58:58 +0200 Subject: [PATCH] change coordinate validate before send --- src/kds_s2000w_handler.c | 4 +- src/kds_s2000w_handler_opts.c | 60 +++++++++++----------- src/kds_s2000w_option_descriptors.c | 2 +- tests/kds_s2000w_option_descriptor_tests.c | 2 +- 4 files changed, 34 insertions(+), 34 deletions(-) diff --git a/src/kds_s2000w_handler.c b/src/kds_s2000w_handler.c index a657edf..3f4d11a 100644 --- a/src/kds_s2000w_handler.c +++ b/src/kds_s2000w_handler.c @@ -83,8 +83,8 @@ handler* kds_s2000w_handler_init() h->image->data = NULL; h->coord->offset_x = 0; h->coord->offset_y = 0; - h->coord->width = 10; - h->coord->height = 10; + h->coord->width = 0; + h->coord->height = 0; return h; } diff --git a/src/kds_s2000w_handler_opts.c b/src/kds_s2000w_handler_opts.c index 04ed8ec..491c6ba 100644 --- a/src/kds_s2000w_handler_opts.c +++ b/src/kds_s2000w_handler_opts.c @@ -8,8 +8,6 @@ #define AUTOSTART_ON 1 #define GUI_DPI 300 -#define MAX_WIDTH_INCH 85 -#define MAX_HEIGHT_INCH 140 void _kds_s2000w_handler_opts_write_value_to_json(json_object* value_object, SANE_Value_Type value_type, void* value) { @@ -39,10 +37,14 @@ void _kds_s2000w_handler_opts_write_value(json_object* value_object, SANE_Value_ } } -void _kds_s2000w_handler_opts_set_valid_coord(handler* h) +void _kds_s2000w_handler_opts_set_valid_coord(handler* h, option_descriptor* descriptor) { - bool valid = h->coord->offset_x + h->coord->width < MAX_WIDTH_INCH; - valid = valid && h->coord->offset_y + h->coord->height < MAX_HEIGHT_INCH; + bool valid = h->coord->offset_x >= 0 && h->coord->offset_x <= 75; + valid = valid && h->coord->offset_y >= 0 && h->coord->offset_y <= 130; + valid = valid && h->coord->width >= 10 && h->coord->width <= 85; + valid = valid && h->coord->height >= 10 && h->coord->height <= 140; + valid = valid && h->coord->offset_x + h->coord->width <= 85; + valid = valid && h->coord->offset_y + h->coord->height <= 140; if (!valid) return; @@ -434,24 +436,9 @@ void kds_s2000w_handler_opts_set_option(handler* h, uint32_t option, void* value config = json_object_object_get(h->current_scanner_config, "Configuration"); option_descriptor* descriptor = kds_s2000w_option_descriptors_full_get_by_number(option); - json_object* value_object = NULL; - - value_object = json_object_object_get(config, descriptor->config_name); - _kds_s2000w_handler_opts_write_value_to_json(value_object, descriptor->descriptor->type, value); - - if (strcmp(descriptor->config_name, COLOR_MODE) == 0) { - if (strcmp(value, "Flatbed") == 0) - h->current_scan_status->feeder = Flatbed; - - if (strcmp(value, "DocumentFeeder") == 0) - h->current_scan_status->feeder = DocumentFeeder; - - if (strcmp(value, "Automatic") == 0) - h->current_scan_status->feeder = Automatic; - } + json_object* value_object = json_object_object_get(config, descriptor->config_name); - if (strcmp(descriptor->config_name, IMAGE_OFFSET_X) == 0 - || strcmp(descriptor->config_name, IMAGE_OFFSET_Y) == 0) { + if (strcmp(descriptor->config_name, IMAGE_OFFSET_X) == 0) { int32_t* int_value = (int32_t*) value; uint32_t tenth_inch = kds_s2000w_pixel_converter_pixel_to_tenth_inch(GUI_DPI, *int_value); h->coord->offset_x = tenth_inch; @@ -460,14 +447,12 @@ void kds_s2000w_handler_opts_set_option(handler* h, uint32_t option, void* value if (strcmp(descriptor->config_name, IMAGE_OFFSET_Y) == 0) { int32_t* int_value = (int32_t*) value; uint32_t tenth_inch = kds_s2000w_pixel_converter_pixel_to_tenth_inch(GUI_DPI, *int_value); - h->coord->offset_x = tenth_inch; + h->coord->offset_y = tenth_inch; } if (strcmp(descriptor->config_name, IMAGE_WIDTH) == 0) { int32_t* int_value = (int32_t*) value; - value_object = json_object_object_get(config, IMAGE_OFFSET_X); - int32_t tenth_inch_offset_x = json_object_get_int(value_object); - uint32_t offset_x_pixel = kds_s2000w_pixel_converter_tenth_inch_to_pixel(GUI_DPI, tenth_inch_offset_x); + uint32_t offset_x_pixel = kds_s2000w_pixel_converter_tenth_inch_to_pixel(GUI_DPI, h->coord->offset_x); uint32_t width_pixel = *int_value - offset_x_pixel; uint32_t tenth_inch_width = kds_s2000w_pixel_converter_pixel_to_tenth_inch(GUI_DPI, width_pixel); h->coord->width = tenth_inch_width; @@ -475,15 +460,30 @@ void kds_s2000w_handler_opts_set_option(handler* h, uint32_t option, void* value if (strcmp(descriptor->config_name, IMAGE_HEIGHT) == 0) { int32_t* int_value = (int32_t*) value; - value_object = json_object_object_get(config, IMAGE_OFFSET_Y); - int32_t tenth_inch_offset_y = json_object_get_int(value_object); - uint32_t offset_y_pixel = kds_s2000w_pixel_converter_tenth_inch_to_pixel(GUI_DPI, tenth_inch_offset_y); + uint32_t offset_y_pixel = kds_s2000w_pixel_converter_tenth_inch_to_pixel(GUI_DPI, h->coord->offset_y); uint32_t height_pixel = *int_value - offset_y_pixel; uint32_t tenth_inch_height = kds_s2000w_pixel_converter_pixel_to_tenth_inch(GUI_DPI, height_pixel); h->coord->height = tenth_inch_height; } - _kds_s2000w_handler_opts_set_valid_coord(h); + _kds_s2000w_handler_opts_set_valid_coord(h, descriptor); + + if (strcmp(descriptor->config_name, IMAGE_OFFSET_X) != 0 + && strcmp(descriptor->config_name, IMAGE_OFFSET_Y) != 0 + && strcmp(descriptor->config_name, IMAGE_WIDTH) != 0 + && strcmp(descriptor->config_name, IMAGE_HEIGHT) != 0) + _kds_s2000w_handler_opts_write_value_to_json(value_object, descriptor->descriptor->type, value); + + if (strcmp(descriptor->config_name, COLOR_MODE) == 0) { + if (strcmp(value, "Flatbed") == 0) + h->current_scan_status->feeder = Flatbed; + + if (strcmp(value, "DocumentFeeder") == 0) + h->current_scan_status->feeder = DocumentFeeder; + + if (strcmp(value, "Automatic") == 0) + h->current_scan_status->feeder = Automatic; + } if (strcmp(descriptor->config_name, RESET) == 0) { _kds_s2000w_handler_opts_set_option_to_default(h); diff --git a/src/kds_s2000w_option_descriptors.c b/src/kds_s2000w_option_descriptors.c index 9952ed8..86eac7e 100644 --- a/src/kds_s2000w_option_descriptors.c +++ b/src/kds_s2000w_option_descriptors.c @@ -323,7 +323,7 @@ SANE_Option_Descriptor* _kds_s2000w_option_descriptor_image_height() SANE_Range* constraint = malloc(sizeof(SANE_Range)); constraint->min = 300; - constraint->max = 3900; + constraint->max = 4200; constraint->quant = 30; SANE_Option_Descriptor* descriptor = malloc(sizeof(SANE_Option_Descriptor)); diff --git a/tests/kds_s2000w_option_descriptor_tests.c b/tests/kds_s2000w_option_descriptor_tests.c index c548f5d..5682233 100644 --- a/tests/kds_s2000w_option_descriptor_tests.c +++ b/tests/kds_s2000w_option_descriptor_tests.c @@ -236,7 +236,7 @@ void kds_s2000w_option_get_descriptor_twelve_test() assert_int_equal(SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT, option->cap); assert_int_equal(SANE_CONSTRAINT_RANGE, option->constraint_type); assert_int_equal(option->constraint.range->min, 300); - assert_int_equal(option->constraint.range->max, 3900); + assert_int_equal(option->constraint.range->max, 4200); assert_int_equal(option->constraint.range->quant, 30); } -- 2.47.3