From addbb09bf81444030dcd17094e8892a91875b157 Mon Sep 17 00:00:00 2001 From: Gerhard Sittig Date: Sat, 10 Feb 2018 10:26:23 +0100 Subject: [PATCH] hameg-hmo: fix potential memory leak Make sure to release the allocated "pod enabled" memory, too, when SCPI communication during channel setup fails. Defer the return with an error (instead of duplicating the free() invocation). This was reported by clang's scan-build. --- src/hardware/hameg-hmo/api.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/hardware/hameg-hmo/api.c b/src/hardware/hameg-hmo/api.c index ea2afef6..e4c53887 100644 --- a/src/hardware/hameg-hmo/api.c +++ b/src/hardware/hameg-hmo/api.c @@ -509,6 +509,7 @@ static int hmo_setup_channels(const struct sr_dev_inst *sdi) struct sr_channel *ch; struct dev_context *devc; struct sr_scpi_dev_inst *scpi; + int ret; devc = sdi->priv; scpi = sdi->conn; @@ -559,19 +560,23 @@ static int hmo_setup_channels(const struct sr_dev_inst *sdi) } } + ret = SR_OK; for (i = 0; i < model->digital_pods; i++) { if (state->digital_pods[i] == pod_enabled[i]) continue; g_snprintf(command, sizeof(command), (*model->scpi_dialect)[SCPI_CMD_SET_DIG_POD_STATE], i + 1, pod_enabled[i]); - if (sr_scpi_send(scpi, command) != SR_OK) - return SR_ERR; + if (sr_scpi_send(scpi, command) != SR_OK) { + ret = SR_ERR; + break; + } state->digital_pods[i] = pod_enabled[i]; setup_changed = TRUE; } - g_free(pod_enabled); + if (ret != SR_OK) + return ret; if (setup_changed && hmo_update_sample_rate(sdi) != SR_OK) return SR_ERR;