So we get a consistent error message; came up in a PR review.
Closes: #1277
Approved by: jlebon
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,
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
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 */
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 */
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? */
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
if ${CMD_PREFIX} ostree --repo=repo pull-local --untrusted ostree-srv/gnomerepo main 2>err.txt; then
assert_not_reached "pull-local --untrusted worked?"
fi
- assert_file_has_content err.txt "Corrupted commit object ${corruptrev}.*actual checksum is ${rev}"
+ assert_file_has_content_literal err.txt "Corrupted commit object; checksum expected='${corruptrev}' actual='${rev}'"
rm repo err.txt -rf
ostree_repo_init repo --mode=bare-user
if ${CMD_PREFIX} ostree --repo=repo pull origin main 2>err.txt; then
assert_not_reached "pull unexpectedly succeeded!"
fi
- assert_file_has_content err.txt "Corrupted commit object ${corruptrev}.*actual checksum is ${rev}"
+ assert_file_has_content_literal err.txt "Corrupted commit object; checksum expected='${corruptrev}' actual='${rev}'"
echo "ok pull commit corruption"
fi