]> gitweb.hhaalo.de Git - sane-kds-s2000w-net.git/commitdiff
fix leak free handler failed open
authorBastian Dehn <hhaalo@arcor.de>
Sun, 5 Jan 2025 08:44:15 +0000 (09:44 +0100)
committerBastian Dehn <hhaalo@arcor.de>
Sun, 5 Jan 2025 08:44:15 +0000 (09:44 +0100)
src/kds_s2000w_net.c
tests/kds_s2000w_net_tests.c

index de97c48581af336d88892adcdf32b1b4a929ab63..3109cac5c407e6ff36343ce6c0680cec3df8f32e 100644 (file)
@@ -67,11 +67,17 @@ SANE_Status _sane_kds_s2000w_net_open(SANE_String_Const devicename,
        kds_s2000w_handler_open(devicename, handle);
        handler* h = (handler*) *handle;
 
-       if (h->state == NOTCONNECTED)
+       if (h->state == NOTCONNECTED) {
+               free_handler(h);
+               h = NULL;
                return SANE_STATUS_IO_ERROR;
+       }
 
-       if (h->state == BUSY)
+       if (h->state == BUSY) {
+               free_handler(h);
+               h = NULL;
                return SANE_STATUS_DEVICE_BUSY;
+       }
 
        kds_s2000w_option_descriptor_init_option_descriptors();
        return SANE_STATUS_GOOD;
index d8e4e65cb45e6e434d9bc69457eba1cc534e2147..823f4cc4c608db592555682b9af5790e0b0c2118 100644 (file)
@@ -594,14 +594,9 @@ void sane_kds_s2000w_net_open_busy_device()
        void** hlist = malloc(sizeof(void*));
 
        SANE_Status status = _sane_kds_s2000w_net_open("kds_s2000w_net", hlist);
-       handler* h = (handler*) *hlist;
 
-       assert_int_equal(h->sessionid, 0);
-       assert_int_equal(h->state, BUSY);
        assert_int_equal(status, SANE_STATUS_DEVICE_BUSY);
 
-       free_handler(h);
-       h = NULL;
        kds_s2000w_client_response_free(resp);
        resp = NULL;
        free(hlist);
@@ -630,14 +625,9 @@ void sane_kds_s2000w_net_open_not_connected()
        void** hlist = malloc(sizeof(void*));
 
        SANE_Status status = _sane_kds_s2000w_net_open("kds_s2000w_net", hlist);
-       handler* h = (handler*) *hlist;
 
-       assert_int_equal(h->sessionid, 0);
-       assert_int_equal(h->state, NOTCONNECTED);
        assert_int_equal(status, SANE_STATUS_IO_ERROR);
 
-       free_handler(h);
-       h = NULL;
        kds_s2000w_client_response_free(resp);
        resp = NULL;
        free(hlist);