]> sigrok.org Git - libsigrok.git/commitdiff
input/csv: stricter input data test for multi column mode
authorGerhard Sittig <redacted>
Sun, 13 Oct 2019 15:20:16 +0000 (17:20 +0200)
committerGerhard Sittig <redacted>
Sat, 21 Dec 2019 17:20:04 +0000 (18:20 +0100)
The previous implementation assumed that in multi-column mode each cell
communicates exactly one bit of input (a logic channel). But only the
first character got tested. Tighten the check, to cover the whole input
text. This rejects fully invalid input, as well as increases robustness
since multi-bit input like "100" was mistaken as a value of 1 before.

src/input/csv.c

index 6d3264902362f04363deb6e2b28e7c22748cf82c..895c1c6d8c175031b3f97282e42adfe2df1696d4 100644 (file)
@@ -446,13 +446,13 @@ static int parse_multi_columns(char **columns, struct context *inc)
 
        for (i = 0; i < inc->num_channels; i++) {
                column = columns[i];
-               if (column[0] == '1') {
+               if (strcmp(column, "1") == 0) {
                        inc->sample_buffer[i / 8] |= (1 << (i % 8));
                } else if (!strlen(column)) {
                        sr_err("Column %zu in line %zu is empty.",
                                inc->first_channel + i, inc->line_number);
                        return SR_ERR;
-               } else if (column[0] != '0') {
+               } else if (strcmp(column, "0") != 0) {
                        sr_err("Invalid value '%s' in column %zu in line %zu.",
                                column, inc->first_channel + i,
                                inc->line_number);