]> sigrok.org Git - libsigrok.git/commitdiff
manson-hcs-3xxx: Fix use-after-free and memory leaks.
authorUwe Hermann <redacted>
Fri, 25 Sep 2015 07:00:05 +0000 (09:00 +0200)
committerUwe Hermann <redacted>
Fri, 25 Sep 2015 10:19:08 +0000 (12:19 +0200)
Thanks to Hannu Vuolasaho for the report!

src/hardware/manson-hcs-3xxx/api.c

index 0662a81e1a0472a4c23c5388fca0874fe5997e74..e79e59dc160ff4d7fddec2b516f005f13391359d 100644 (file)
@@ -145,12 +145,12 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options)
                if (!strcmp(models[i].id, tokens[0]))
                        model_id = i;
        }
-       g_strfreev(tokens);
-
        if (model_id < 0) {
-               sr_err("Unknown model id '%s' detected, aborting.", tokens[0]);
+               sr_err("Unknown model ID '%s' detected, aborting.", tokens[0]);
+               g_strfreev(tokens);
                return NULL;
        }
+       g_strfreev(tokens);
 
        /* Init device instance, etc. */
        sdi = g_malloc0(sizeof(struct sr_dev_inst));
@@ -173,8 +173,10 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options)
            (hcs_read_reply(serial, 2, reply, sizeof(reply)) < 0))
                goto exit_err;
        tokens = g_strsplit((const gchar *)&reply, "\r", 2);
-       if (hcs_parse_volt_curr_mode(sdi, tokens) < 0)
+       if (hcs_parse_volt_curr_mode(sdi, tokens) < 0) {
+               g_strfreev(tokens);
                goto exit_err;
+       }
        g_strfreev(tokens);
 
        /* Get max. voltage and current. */