]> gitweb.hhaalo.de Git - sane-kds-s2000w-net.git/commitdiff
add test for empty image header
authorBastian Dehn <hhaalo@arcor.de>
Sat, 18 May 2024 06:35:40 +0000 (08:35 +0200)
committerBastian Dehn <hhaalo@arcor.de>
Sat, 18 May 2024 06:35:40 +0000 (08:35 +0200)
src/kds_s2000w_net.c
tests/kds_s2000w_net_read_tests.c
tests/kds_s2000w_net_read_tests.h
tests/kds_s2000w_net_read_tests_run.c

index 593ac3ac611d1ec4039c186a6ae20602ed5ef38c..480c63727f53a5fddf7927577364c10c658ffb38 100644 (file)
@@ -9,9 +9,10 @@
 #include "kds_s2000w_handler.h"
 #include "kds_s2000w_debug.h"
 
-int _sane_kds_s2000w_net_find_first_data_byte(const char* data)
+int _sane_kds_s2000w_net_find_first_data_byte(imagedata* image)
 {
        debug_printf(ALL, "sane_kds_s2000w_net_find_first_data_byte");
+       char* data = image->data;
        int header_spaces = 3;
 
        if (strncmp(data, "P4", 2) == 0)
@@ -21,10 +22,9 @@ int _sane_kds_s2000w_net_find_first_data_byte(const char* data)
        int space_count = 0;
        int byte_count = 0;
 
-       while(space_count < header_spaces) {
-               if (data[byte_count] == space) {
+       while(space_count < header_spaces && byte_count < image->size) {
+               if (data[byte_count] == space)
                        space_count++;
-               }
 
                byte_count++;
        }
@@ -215,6 +215,15 @@ SANE_Status _sane_kds_s2000w_net_read(SANE_Handle handle, SANE_Byte* data,
                return SANE_STATUS_CANCELLED;
        }
 
+       // calc max length
+       *length = h->pnm_image->size - h->read_info->read_size;
+       if (*length > max_length)
+               *length = max_length;
+
+       // read image
+       if (h->pnm_image->data != NULL && h->read_info->read_size <= 0)
+               h->read_info->read_size += _sane_kds_s2000w_net_find_first_data_byte(h->pnm_image);
+
        // last frame
        if (h->read_info->read_size >= h->pnm_image->size) {
                *length = 0;
@@ -228,15 +237,6 @@ SANE_Status _sane_kds_s2000w_net_read(SANE_Handle handle, SANE_Byte* data,
                return SANE_STATUS_EOF;
        }
 
-       // calc max length
-       *length = h->pnm_image->size - h->read_info->read_size;
-       if (*length > max_length)
-               *length = max_length;
-
-       // read image
-       if (h->pnm_image->data != NULL && h->read_info->read_size <= 0)
-               h->read_info->read_size += _sane_kds_s2000w_net_find_first_data_byte(h->pnm_image->data);
-
        memcpy(data, h->pnm_image->data + h->read_info->read_size, *length);
        h->read_info->read_size += *length;
 
index 4463ed7f9764b3931064090cc72f83f5fd581d7a..81fa72e96c83da30132268edd8c25cd84bfc7a28 100644 (file)
@@ -80,6 +80,37 @@ void sane_kds_s2000w_net_read_empty_image()
        h = NULL;
 }
 
+void sane_kds_s2000w_net_read_without_header_test()
+{
+       handler* h = init_handler();
+       h->pnm_image->size = 65536;
+       h->pnm_image->data = malloc(sizeof(char) * 65536);
+       char* imagedata = (char*) h->pnm_image->data;
+       for (int i = 0; i < 65536; i++) {
+               imagedata[i] = 0xff;
+       }
+
+       SANE_Int maxlen = 65536;
+       char* dataptr = malloc(sizeof(char) * maxlen);
+       SANE_Int* length = malloc(sizeof(SANE_Int));
+
+       SANE_Status status = _sane_kds_s2000w_net_read(h, (void*) dataptr, maxlen, length);
+
+       assert_int_equal(*length, 0);
+       assert_null(h->pnm_image->data);
+       assert_int_equal(h->read_info->read_size, 65536);
+       assert_int_equal(status, SANE_STATUS_EOF);
+
+       free(dataptr);
+       dataptr = NULL;
+       free(length);
+       length = NULL;
+       free(h->pnm_image->data);
+       h->pnm_image->data = NULL;
+       free_handler(h);
+       h = NULL;
+}
+
 void sane_kds_s2000w_net_read_test()
 {
        handler* h = init_handler();
index 8b375b4046a1175957f0537f73f2bfe578a9d6f0..b306155b6d7cbc56cb5aee7a43c8e91155fdceb1 100644 (file)
@@ -9,6 +9,7 @@
 void sane_kds_s2000w_net_read_cancel_test();
 void sane_kds_s2000w_net_read_without_data();
 void sane_kds_s2000w_net_read_empty_image();
+void sane_kds_s2000w_net_read_without_header_test();
 void sane_kds_s2000w_net_read_test();
 void sane_kds_s2000w_net_read_bw_test();
 void sane_kds_s2000w_net_read_bytes_per_line_bigger_test();
index 4950a01add4e8c0ba62a44d68bbe3d06bdb66b21..47cef1d9e31198608883ae2e7b866f51ec6ea7da 100644 (file)
@@ -6,6 +6,7 @@ int main()
                cmocka_unit_test(sane_kds_s2000w_net_read_cancel_test),
                cmocka_unit_test(sane_kds_s2000w_net_read_without_data),
                cmocka_unit_test(sane_kds_s2000w_net_read_empty_image),
+               cmocka_unit_test(sane_kds_s2000w_net_read_without_header_test),
                cmocka_unit_test(sane_kds_s2000w_net_read_test),
                cmocka_unit_test(sane_kds_s2000w_net_read_bw_test),
                cmocka_unit_test(sane_kds_s2000w_net_read_bytes_per_line_bigger_test)