lib: Fix some logic/error-checking code

Using `MAX(0, $x)` here is useless since we're comparing against an
unsigned integer. Just unpack this and only subtract if it's safe to do
so.

Also, explicitly check for `fd >= 0` rather than just `!= -1` to be sure
it's a valid fd. And finally, explicitly check the return value of
`g_input_stream_read_all` as is done everywhere else in the tree and
make it clear that we're purposely ignoring the return value of `_flush`
here, but not in other places.

Discovered by Coverity.

Closes: #1692
Approved by: cgwalters
This commit is contained in:
Jonathan Lebon 2018-07-25 17:51:01 -04:00 committed by Atomic Bot
parent fcd31a195b
commit 968e8805b0
2 changed files with 7 additions and 8 deletions

View File

@ -4611,8 +4611,9 @@ ostree_repo_pull_default_console_progress_changed (OstreeAsyncProgress *progress
if (bytes_sec > 0)
{
/* MAX(0, value) here just to be defensive */
guint64 est_time_remaining = MAX(0, (total_delta_part_size - fetched_delta_part_size)) / bytes_sec;
guint64 est_time_remaining = 0;
if (total_delta_part_size > fetched_delta_part_size)
est_time_remaining = (total_delta_part_size - fetched_delta_part_size) / bytes_sec;
g_autofree char *formatted_est_time_remaining = _formatted_time_remaining_from_seconds (est_time_remaining);
/* No space between %s and remaining, since formatted_est_time_remaining has a trailing space */
g_string_append_printf (buf, "Receiving delta parts: %u/%u %s/%s %s/s %sremaining",
@ -4891,7 +4892,7 @@ ostree_repo_add_gpg_signature_summary (OstreeRepo *self,
g_autoptr(GVariant) metadata = NULL;
if (!ot_openat_ignore_enoent (self->repo_dir_fd, "summary.sig", &fd, error))
return FALSE;
if (fd != -1)
if (fd >= 0)
{
if (!ot_variant_read_fd (fd, 0, G_VARIANT_TYPE (OSTREE_SUMMARY_SIG_GVARIANT_STRING),
FALSE, &metadata, error))

View File

@ -262,10 +262,8 @@ data_read_cb (void *handle, void *buffer, size_t size)
g_return_val_if_fail (G_IS_INPUT_STREAM (input_stream), -1);
g_input_stream_read_all (input_stream, buffer, size,
&bytes_read, NULL, &local_error);
if (local_error != NULL)
if (!g_input_stream_read_all (input_stream, buffer, size,
&bytes_read, NULL, &local_error))
{
set_errno_from_gio_error (local_error);
g_clear_error (&local_error);
@ -287,7 +285,7 @@ data_write_cb (void *handle, const void *buffer, size_t size)
if (g_output_stream_write_all (output_stream, buffer, size,
&bytes_written, NULL, &local_error))
{
g_output_stream_flush (output_stream, NULL, &local_error);
(void)g_output_stream_flush (output_stream, NULL, &local_error);
}
if (local_error != NULL)