From: Mike Gelfand Date: Wed, 13 Mar 2019 02:32:35 +0000 (+0300) Subject: Attempt to explain something to Coverity X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=698bb2c4188a946f6493c8ada358bb36c7f5adb1;p=transmission Attempt to explain something to Coverity I'm seeing 7 potentially false reported issues re. use of uninitialized buffer data here. It seems that `read` function should be properly supported by Coverity, but maybe it can't figure out the postconditions of it properly... Walking in the dark here. --- diff --git a/libtransmission/file.c b/libtransmission/file.c index a2da678df..14335f70b 100644 --- a/libtransmission/file.c +++ b/libtransmission/file.c @@ -26,7 +26,9 @@ bool tr_sys_file_read_line(tr_sys_file_t handle, char* buffer, size_t buffer_siz while (buffer_size > 0) { - ret = tr_sys_file_read(handle, buffer + offset, MIN(buffer_size, 1024u), &bytes_read, error); + size_t const bytes_needed = MIN(buffer_size, 1024u); + + ret = tr_sys_file_read(handle, buffer + offset, bytes_needed, &bytes_read, error); if (!ret || (offset == 0 && bytes_read == 0)) { @@ -34,6 +36,9 @@ bool tr_sys_file_read_line(tr_sys_file_t handle, char* buffer, size_t buffer_siz break; } + TR_ASSERT(bytes_read <= bytes_needed); + TR_ASSERT(bytes_read <= buffer_size); + int64_t delta = 0; for (size_t i = 0; i < bytes_read; ++i, ++offset, --buffer_size)