From: John Crispin Date: Tue, 13 Feb 2018 15:33:48 +0000 (+0100) Subject: procd: fix ustream deadlock when there are 0 bytes or no newlines X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=747efb6255cb06e1cd0a8553fd12b9c1f6537d95;p=oweals%2Fprocd.git procd: fix ustream deadlock when there are 0 bytes or no newlines Signed-off-by: John Crispin --- diff --git a/service/instance.c b/service/instance.c index 917b003..27e35b1 100644 --- a/service/instance.c +++ b/service/instance.c @@ -469,18 +469,20 @@ instance_stdio(struct ustream *s, int prio, struct service_instance *in) ulog_open(ULOG_SYSLOG, LOG_DAEMON, ident); do { - str = ustream_get_read_buf(s, NULL); + str = ustream_get_read_buf(s, &len); if (!str) break; - newline = strchr(str, '\n'); - if (!newline) + newline = memchr(str, '\n', len); + if (!newline && (s->r.buffer_len != len)) break; - *newline = 0; + if (newline) { + *newline = 0; + len = newline + 1 - str; + } ulog(prio, "%s\n", str); - len = newline + 1 - str; ustream_consume(s, len); } while (1);