lib: Use a common helper function to compare checksums
So we get a consistent error message; came up in a PR review. Closes: #1277 Approved by: jlebon
This commit is contained in:
1 parent
16c31a9b58
commit
e744f2ad6f
5 files changed
+39
-24
No files matched your search
@@ -141,6 +141,12 @@ _ostree_validate_bareuseronly_mode_finfo (GFileInfo *finfo,
|
||||
return _ostree_validate_bareuseronly_mode (content_mode, checksum, error);
|
||||
}
|
||||
|
||||
gboolean
|
||||
_ostree_compare_object_checksum (OstreeObjectType objtype,
|
||||
const char *expected,
|
||||
const char *actual,
|
||||
GError **error);
|
||||
|
||||
gboolean
|
||||
_ostree_parse_delta_name (const char *delta_name,
|
||||
char **out_from,
|
||||
|
||||
@@ -1004,6 +1004,22 @@ ostree_checksum_file_async_finish (GFile *f,
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/* Common helper to compare checksums for an object, so we have a consistent
|
||||
* error message.
|
||||
*/
|
||||
gboolean
|
||||
_ostree_compare_object_checksum (OstreeObjectType objtype,
|
||||
const char *expected,
|
||||
const char *actual,
|
||||
GError **error)
|
||||
{
|
||||
if (!g_str_equal (expected, actual))
|
||||
return glnx_throw (error, "Corrupted %s object; checksum expected='%s' actual='%s'",
|
||||
ostree_object_type_to_string (objtype),
|
||||
expected, actual);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/**
|
||||
* ostree_create_directory_metadata:
|
||||
* @dir_info: a #GFileInfo containing directory information
|
||||
|
||||
@@ -685,10 +685,12 @@ write_content_object (OstreeRepo *self,
|
||||
else
|
||||
{
|
||||
actual_checksum = actual_checksum_owned = ot_checksum_instream_get_string (checksum_input);
|
||||
if (expected_checksum && strcmp (actual_checksum, expected_checksum) != 0)
|
||||
return glnx_throw (error, "Corrupted %s object %s (actual checksum is %s)",
|
||||
ostree_object_type_to_string (OSTREE_OBJECT_TYPE_FILE),
|
||||
expected_checksum, actual_checksum);
|
||||
if (expected_checksum)
|
||||
{
|
||||
if (!_ostree_compare_object_checksum (OSTREE_OBJECT_TYPE_FILE, expected_checksum, actual_checksum,
|
||||
error))
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
g_assert (actual_checksum != NULL); /* Pacify static analysis */
|
||||
@@ -954,10 +956,11 @@ write_metadata_object (OstreeRepo *self,
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (expected_checksum && strcmp (actual_checksum, expected_checksum) != 0)
|
||||
return glnx_throw (error, "Corrupted %s object %s (actual checksum is %s)",
|
||||
ostree_object_type_to_string (objtype),
|
||||
expected_checksum, actual_checksum);
|
||||
if (expected_checksum)
|
||||
{
|
||||
if (!_ostree_compare_object_checksum (objtype, expected_checksum, actual_checksum, error))
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
/* Ok, checksum is known, let's get the data */
|
||||
|
||||
@@ -1005,13 +1005,8 @@ content_fetch_on_write_complete (GObject *object,
|
||||
checksum_obj = ostree_object_to_string (checksum, objtype);
|
||||
g_debug ("write of %s complete", checksum_obj);
|
||||
|
||||
if (strcmp (checksum, expected_checksum) != 0)
|
||||
{
|
||||
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
|
||||
"Corrupted content object; checksum expected='%s' actual='%s'",
|
||||
expected_checksum, checksum);
|
||||
goto out;
|
||||
}
|
||||
if (!_ostree_compare_object_checksum (objtype, expected_checksum, checksum, error))
|
||||
goto out;
|
||||
|
||||
pull_data->n_fetched_content++;
|
||||
/* Was this a delta fallback? */
|
||||
@@ -1256,13 +1251,8 @@ meta_fetch_on_complete (GObject *object,
|
||||
char hexdigest[OSTREE_SHA256_STRING_LEN+1];
|
||||
ot_checksum_get_hexdigest (&hasher, hexdigest, sizeof (hexdigest));
|
||||
|
||||
if (strcmp (checksum, hexdigest) != 0)
|
||||
{
|
||||
(void) glnx_throw (error, "Corrupted %s object %s (actual checksum is %s)",
|
||||
ostree_object_type_to_string (objtype),
|
||||
checksum, hexdigest);
|
||||
goto out;
|
||||
}
|
||||
if (!_ostree_compare_object_checksum (objtype, checksum, hexdigest, error))
|
||||
goto out;
|
||||
|
||||
/* Do GPG verification. `detached_data` may be NULL if no detached
|
||||
* metadata was found during pull; that's handled by
|
||||
|
||||
Reference in new issue
Block a user