]> sigrok.org Git - libsigrok.git/commitdiff
backend: fixup resource leak in sr_init() error code path
authorGerhard Sittig <redacted>
Sun, 26 Mar 2017 13:46:37 +0000 (15:46 +0200)
committerGerhard Sittig <redacted>
Fri, 9 Feb 2018 20:59:18 +0000 (21:59 +0100)
Early sr_init() steps can just 'return' fine. After allocation of the
'context' memory, make all error paths 'goto done' before returning,
to undo the memory allocation.

src/backend.c

index e5fe6a3f764edcce2cb678e92f93a22277b6d486..a88459ac50f7eaaf123210ddb2fe8303b65ad394 100644 (file)
@@ -540,22 +540,22 @@ SR_API int sr_init(struct sr_context **ctx)
 
        if (sanity_check_all_drivers(context) < 0) {
                sr_err("Internal driver error(s), aborting.");
-               return ret;
+               goto done;
        }
 
        if (sanity_check_all_input_modules() < 0) {
                sr_err("Internal input module error(s), aborting.");
-               return ret;
+               goto done;
        }
 
        if (sanity_check_all_output_modules() < 0) {
                sr_err("Internal output module error(s), aborting.");
-               return ret;
+               goto done;
        }
 
        if (sanity_check_all_transform_modules() < 0) {
                sr_err("Internal transform module error(s), aborting.");
-               return ret;
+               goto done;
        }
 
 #ifdef _WIN32
@@ -580,9 +580,7 @@ SR_API int sr_init(struct sr_context **ctx)
        context = NULL;
        ret = SR_OK;
 
-#if defined(HAVE_LIBUSB_1_0) || defined(_WIN32)
 done:
-#endif
        g_free(context);
        return ret;
 }