From 36165cf0f7a226f76d3e9832a70e06d9d0d634ec Mon Sep 17 00:00:00 2001 From: Gerhard Sittig Date: Sun, 16 May 2021 14:44:57 +0200 Subject: [PATCH] lecroy-xstream: free memory that was allocated by SCPI get routines The SCPI get routines may allocate memory for response data which callers have to free after use. This addresses part of bug #1683. --- src/hardware/lecroy-xstream/protocol.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/hardware/lecroy-xstream/protocol.c b/src/hardware/lecroy-xstream/protocol.c index 9693c6d3..a05ff618 100644 --- a/src/hardware/lecroy-xstream/protocol.c +++ b/src/hardware/lecroy-xstream/protocol.c @@ -435,6 +435,7 @@ SR_PRIV int lecroy_xstream_state_get(struct sr_dev_inst *sdi) } i++; } + g_free(tmp_str); if (!trig_source || scope_state_get_array_option(trig_source, config->trigger_sources, config->num_trigger_sources, @@ -448,6 +449,7 @@ SR_PRIV int lecroy_xstream_state_get(struct sr_dev_inst *sdi) if (scope_state_get_array_option(tmp_str, config->trigger_slopes, config->num_trigger_slopes, &state->trigger_slope) != SR_OK) return SR_ERR; + g_free(tmp_str); if (sr_scpi_get_float(sdi->conn, "TRIG_DELAY?", &state->horiz_triggerpos) != SR_OK) return SR_ERR; @@ -630,8 +632,6 @@ SR_PRIV int lecroy_xstream_receive_data(int fd, int revents, void *cb_data) (void)fd; (void)revents; - data = NULL; - if (!(sdi = cb_data)) return TRUE; @@ -644,6 +644,7 @@ SR_PRIV int lecroy_xstream_receive_data(int fd, int revents, void *cb_data) if (ch->type != SR_CHANNEL_ANALOG) return SR_ERR; + data = NULL; if (sr_scpi_get_block(sdi->conn, NULL, &data) != SR_OK) { if (data) g_byte_array_free(data, TRUE); @@ -659,6 +660,7 @@ SR_PRIV int lecroy_xstream_receive_data(int fd, int revents, void *cb_data) if (analog.num_samples == 0) { g_free(analog.data); + g_byte_array_free(data, TRUE); /* No data available, we have to acquire data first. */ g_snprintf(command, sizeof(command), "ARM;WAIT;*OPC;C%d:WAVEFORM?", ch->index + 1); @@ -671,6 +673,7 @@ SR_PRIV int lecroy_xstream_receive_data(int fd, int revents, void *cb_data) if (state->sample_rate == 0) if (lecroy_xstream_update_sample_rate(sdi, analog.num_samples) != SR_OK) { g_free(analog.data); + g_byte_array_free(data, TRUE); return SR_ERR; } } -- 2.30.2