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 <zl29ah@gmail.com>
This commit is contained in:
Gerhard Sittig 2017-06-05 13:37:33 +02:00 committed by Uwe Hermann
parent f9b7486154
commit 4555d3bda0
1 changed files with 9 additions and 2 deletions

View File

@ -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);