From 8ec203864b3a33b731c591034d06d55998210a79 Mon Sep 17 00:00:00 2001 From: =?utf8?q?poljar=20=28Damir=20Jeli=C4=87=29?= Date: Thu, 14 Nov 2013 20:01:18 +0100 Subject: [PATCH] sigrok-cli: Fix two memory leaks in parse_probestring(). This patch fixes two memory leaks if multiple probe names or probe ranges are specified. --- parsers.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/parsers.c b/parsers.c index 206e1d6..e940417 100644 --- a/parsers.c +++ b/parsers.c @@ -73,25 +73,25 @@ GSList *parse_probestring(struct sr_dev_inst *sdi, const char *probestring) /* Need exactly two arguments. */ g_critical("Invalid probe syntax '%s'.", tokens[i]); ret = SR_ERR; - break; + goto range_fail; } b = strtol(range[0], &eptr, 10); if (eptr == range[0] || *eptr != '\0') { g_critical("Invalid probe '%s'.", range[0]); ret = SR_ERR; - break; + goto range_fail; } e = strtol(range[1], NULL, 10); if (eptr == range[1] || *eptr != '\0') { g_critical("Invalid probe '%s'.", range[1]); ret = SR_ERR; - break; + goto range_fail; } if (b < 0 || b >= e) { g_critical("Invalid probe range '%s'.", tokens[i]); ret = SR_ERR; - break; + goto range_fail; } while (b <= e) { @@ -110,6 +110,10 @@ GSList *parse_probestring(struct sr_dev_inst *sdi, const char *probestring) probelist = g_slist_append(probelist, probe); b++; } +range_fail: + if (range) + g_strfreev(range); + if (ret != SR_OK) break; } else { @@ -133,13 +137,11 @@ GSList *parse_probestring(struct sr_dev_inst *sdi, const char *probestring) probe->name = g_strdup(names[1]); } probelist = g_slist_append(probelist, probe); + + if (names) + g_strfreev(names); } } - if (range) - g_strfreev(range); - - if (names) - g_strfreev(names); if (ret != SR_OK) { g_slist_free(probelist); -- 2.30.2