From: Michael Tremer Date: Tue, 28 Jan 2025 17:47:55 +0000 (+0000) Subject: log stream: Don't loop forever if we did not find a line break X-Git-Tag: 0.9.30~312 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=5e2a065fa9c94b74f7a8460335095f3ff89ab695;p=pakfire.git log stream: Don't loop forever if we did not find a line break Signed-off-by: Michael Tremer --- diff --git a/src/pakfire/log_stream.c b/src/pakfire/log_stream.c index 7442242c..5a001585 100644 --- a/src/pakfire/log_stream.c +++ b/src/pakfire/log_stream.c @@ -114,6 +114,9 @@ struct pakfire_log_stream* pakfire_log_stream_unref(struct pakfire_log_stream* s static int pakfire_log_stream_fill_buffer(struct pakfire_log_stream* stream, int fd) { ssize_t bytes_read; + if (stream->buffered >= sizeof(stream->buffer)) + return -EAGAIN; + // Read into the buffer bytes_read = read(fd, stream->buffer + stream->buffered, sizeof(stream->buffer) - stream->buffered); if (bytes_read < 0) @@ -138,11 +141,16 @@ static int pakfire_log_stream_drain_buffer(struct pakfire_log_stream* stream) { for (;;) { // Find the next line eol = memchr(stream->buffer, '\n', stream->buffered); - if (!eol) - return 0; + if (!eol) { + if (stream->buffered < sizeof(stream->buffer)) + return 0; + } // Determine the length of the line - length = eol - stream->buffer + 1; + if (eol) + length = eol - stream->buffer + 1; + else + length = stream->buffered; // Call the callback r = stream->callback(stream, stream->buffer, length, stream->data);