]> gitweb.hhaalo.de Git - sane-kds-s2000w-net.git/commitdiff
fix allocate issues in handler
authorBastian Dehn <hhaalo@arcor.de>
Sat, 11 Oct 2025 10:02:52 +0000 (12:02 +0200)
committerBastian Dehn <hhaalo@arcor.de>
Sat, 11 Oct 2025 10:02:52 +0000 (12:02 +0200)
src/kds_s2000w_handler.c
src/kds_s2000w_net.c

index 3f4d11a3b3c9d0fae128ce13314ba910a5fd7f72..7b4c4793e93d3ab8bca3b6d2efbfc6d11e29d658 100644 (file)
@@ -62,6 +62,9 @@ handler* kds_s2000w_handler_init()
        kds_s2000w_debug_printf(ALL, "init handler");
 
        handler* h = malloc(sizeof(handler));
+       if (h == NULL)
+               return NULL;
+
        h->current_scanner_config = NULL;
        h->current_scan_status = malloc(sizeof(scanstatus));
        h->read_info = malloc(sizeof(readinfo));
@@ -144,8 +147,10 @@ void kds_s2000w_handler_open(const char* devicename, void** handle)
                return;
 
        handler* h = kds_s2000w_handler_init();
-       *handle = h;
+       if (h == NULL)
+               return;
 
+       *handle = h;
        _kds_s2000w_handler_load_config(h);
        kds_s2000w_debug_printf_version(INFO, DEVICE_NAME, MAJOR, MINOR, PATCH);
 
@@ -295,18 +300,31 @@ void kds_s2000w_handler_get_current_metadata(handler* h, metadata* params)
                return;
 
        image_metadata* mdata = malloc(sizeof(image_metadata));
-
-       blobdata* image = (blobdata*) h->image;
+       if (mdata == NULL)
+               return;
        blobdata* scanner_image = malloc(sizeof(blobdata));
-       uint8_t channels = 1;
-
+       if (scanner_image == NULL) {
+               free(mdata);
+               mdata = NULL;
+               return;
+       }
+       blobdata* image = (blobdata*) h->image;
        scanner_image->data = malloc(sizeof(char) *  image->size);
+       if (scanner_image->data == NULL) {
+               free(mdata);
+               mdata = NULL;
+               free(scanner_image);
+               scanner_image = NULL;
+               return;
+       }
+
        scanner_image->size = image->size;
-       memcpy(scanner_image->data,  image->data,  image->size);
+       memcpy(scanner_image->data, image->data, image->size);
        free(image->data);
        image->data = NULL;
        image->data = 0;
 
+       uint8_t channels = 1;
        if (params->format == 1)
                channels = 3;
 
index 9d8b7debee7b7256f7a13504a8ce04289c61865c..9f1a84901193cf1434626de8a4808901ba19015f 100644 (file)
@@ -73,6 +73,8 @@ SANE_Status sane_kds_s2000w_net_open(SANE_String_Const devicename,
                return SANE_STATUS_INVAL;
 
        kds_s2000w_handler_open(devicename, handle);
+       if (handle == NULL)
+               return SANE_STATUS_NO_MEM;
 
        handler* h = (handler*) *handle;