X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fjournal-remote%2Fjournal-remote-parse.c;h=5ff05d3ad6182661f95c21b3a297af9eff00d5cf;hb=4d6a9d42289f0616c7e37a6d2d7e085d5c71870e;hp=e08cbcc34192de1d5f76dcd5df535d3da12d107e;hpb=ff55c3c7327e6ad8ab139aef52d498386d4f4a72;p=elogind.git diff --git a/src/journal-remote/journal-remote-parse.c b/src/journal-remote/journal-remote-parse.c index e08cbcc34..5ff05d3ad 100644 --- a/src/journal-remote/journal-remote-parse.c +++ b/src/journal-remote/journal-remote-parse.c @@ -114,19 +114,24 @@ static int get_line(RemoteSource *source, char **line, size_t *size) { /* we have to wait for some data to come to us */ return -EAGAIN; + /* We know that source->filled is at most DATA_SIZE_MAX, so if + we reallocate it, we'll increase the size at least a bit. */ + assert_cc(DATA_SIZE_MAX < ENTRY_SIZE_MAX); if (source->size - source->filled < LINE_CHUNK && - !realloc_buffer(source, - MIN(source->filled + LINE_CHUNK, ENTRY_SIZE_MAX))) + !realloc_buffer(source, MIN(source->filled + LINE_CHUNK, ENTRY_SIZE_MAX))) return log_oom(); + assert(source->buf); assert(source->size - source->filled >= LINE_CHUNK || source->size == ENTRY_SIZE_MAX); - n = read(source->fd, source->buf + source->filled, + n = read(source->fd, + source->buf + source->filled, source->size - source->filled); if (n < 0) { if (errno != EAGAIN) - log_error_errno(errno, "read(%d, ..., %zu): %m", source->fd, + log_error_errno(errno, "read(%d, ..., %zu): %m", + source->fd, source->size - source->filled); return -errno; } else if (n == 0) @@ -310,13 +315,13 @@ static int process_dunder(RemoteSource *source, char *line, size_t n) { return 0; } -int process_data(RemoteSource *source) { +static int process_data(RemoteSource *source) { int r; switch(source->state) { case STATE_LINE: { char *line, *sep; - size_t n; + size_t n = 0; assert(source->data_size == 0);