]> sigrok.org Git - libsigrok.git/blobdiff - src/input/csv.c
input/csv: Eliminate remaining memory leaks in error paths
[libsigrok.git] / src / input / csv.c
index a9e5f91ff30af3525751935b15759ffa88ffc697..000599a8d305bf9140fa78679aefb1b5cad72174 100644 (file)
@@ -625,7 +625,6 @@ static int initial_parse(const struct sr_input *in, GString *buf)
         */
        inc->sample_unit_size = (inc->num_channels + 7) / 8;
        inc->datafeed_buf_size = DATAFEED_MAX_SAMPLES;
-       inc->datafeed_buf_size /= inc->sample_unit_size;
        inc->datafeed_buf_size *= inc->sample_unit_size;
        inc->datafeed_buffer = g_malloc(inc->datafeed_buf_size);
        inc->datafeed_buf_fill = 0;
@@ -785,6 +784,7 @@ static int process_buffer(struct sr_input *in, gboolean is_eof)
                columns = parse_line(line, inc, max_columns);
                if (!columns) {
                        sr_err("Error while parsing line %zu.", inc->line_number);
+                       g_strfreev(lines);
                        return SR_ERR;
                }
                num_columns = g_strv_length(columns);
@@ -792,6 +792,7 @@ static int process_buffer(struct sr_input *in, gboolean is_eof)
                        sr_err("Column %u in line %zu is out of bounds.",
                                inc->first_column, inc->line_number);
                        g_strfreev(columns);
+                       g_strfreev(lines);
                        return SR_ERR;
                }
                /*
@@ -802,6 +803,7 @@ static int process_buffer(struct sr_input *in, gboolean is_eof)
                        sr_err("Not enough columns for desired number of channels in line %zu.",
                                inc->line_number);
                        g_strfreev(columns);
+                       g_strfreev(lines);
                        return SR_ERR;
                }
 
@@ -811,6 +813,7 @@ static int process_buffer(struct sr_input *in, gboolean is_eof)
                        ret = parse_single_column(columns[0], inc);
                if (ret != SR_OK) {
                        g_strfreev(columns);
+                       g_strfreev(lines);
                        return SR_ERR;
                }
 
@@ -819,6 +822,7 @@ static int process_buffer(struct sr_input *in, gboolean is_eof)
                if (ret != SR_OK) {
                        sr_err("Sending samples failed.");
                        g_strfreev(columns);
+                       g_strfreev(lines);
                        return SR_ERR;
                }