From: Gerhard Sittig Date: Mon, 5 Jun 2017 11:37:33 +0000 (+0200) Subject: input/csv: Fix a false negative after successful import X-Git-Tag: libsigrok-0.5.0~18 X-Git-Url: https://sigrok.org/gitweb/?p=libsigrok.git;a=commitdiff_plain;h=4555d3bda00ed6f12016d4aca28bbef3cb459988 input/csv: Fix a false negative after successful import The input module runs receive() and end() invocations which end up calling process_buffer(). It's perfectly legal to call the process routine with an empty accumulation buffer, especially when the process routine was called from end(). This fixes a condition where PulseView raised a fatal error at the end of a completed successful import. Reported-By: Sergey Alirzaev --- diff --git a/src/input/csv.c b/src/input/csv.c index 5585b0ee..5399027b 100644 --- a/src/input/csv.c +++ b/src/input/csv.c @@ -644,11 +644,18 @@ static int process_buffer(struct sr_input *in) else max_columns = 1; + /* + * Consider empty input non-fatal. Keep accumulating input until + * at least one full text line has become available. Grab the + * maximum amount of accumulated data that consists of full text + * lines, and process what has been received so far, leaving not + * yet complete lines for the next invocation. + */ + if (!in->buf->len) + return SR_OK; p = g_strrstr_len(in->buf->str, in->buf->len, inc->termination); if (!p) - /* Don't have a full line. */ return SR_ERR; - *p = '\0'; g_strstrip(in->buf->str);