libgit2/tests/object
Patrick Steinhardt 28a0741f1a odb: verify object hashes
The upstream git.git project verifies objects when looking them up from
disk. This avoids scenarios where objects have somehow become corrupt on
disk, e.g. due to hardware failures or bit flips. While our mantra is
usually to follow upstream behavior, we do not do so in this case, as we
never check hashes of objects we have just read from disk.

To fix this, we create a new error class `GIT_EMISMATCH` which denotes
that we have looked up an object with a hashsum mismatch. `odb_read_1`
will then, after having read the object from its backend, hash the
object and compare the resulting hash to the expected hash. If hashes do
not match, it will return an error.

This obviously introduces another computation of checksums and could
potentially impact performance. Note though that we usually perform I/O
operations directly before doing this computation, and as such the
actual overhead should be drowned out by I/O. Running our test suite
seems to confirm this guess. On a Linux system with best-of-five
timings, we had 21.592s with the check enabled and 21.590s with the
ckeck disabled. Note though that our test suite mostly contains very
small blobs only. It is expected that repositories with bigger blobs may
notice an increased hit by this check.

In addition to a new test, we also had to change the
odb::backend::nonrefreshing test suite, which now triggers a hashsum
mismatch when looking up the commit "deadbeef...". This is expected, as
the fake backend allocated inside of the test will return an empty
object for the OID "deadbeef...", which will obviously not hash back to
"deadbeef..." again. We can simply adjust the hash to equal the hash of
the empty object here to fix this test.
2017-04-28 14:05:45 +02:00
..
blob tests: blob: remove unused callback function 2016-08-09 10:09:23 +02:00
commit message: don't assume the comment char 2014-05-18 10:06:49 +02:00
raw Factor 40 and 41 constants from source. 2014-09-16 13:07:04 +02:00
tag tag: ignore extra header fields 2016-04-25 12:18:32 +02:00
tree tree: add a failing test for unsorted input 2016-11-14 12:22:20 +01:00
cache.c threads: split up OS-dependent thread code 2016-06-20 19:32:59 +02:00
lookup.c odb: verify object hashes 2017-04-28 14:05:45 +02:00
lookupbypath.c Introduce cl_assert_equal_oid 2014-07-01 14:40:16 -04:00
message.c message: don't assume the comment char 2014-05-18 10:06:49 +02:00
peel.c peel: reject bad queries with EINVALIDSPEC 2014-11-22 18:55:22 +01:00
shortid.c Add failing test for git_object_short_id 2014-03-10 11:35:14 -07:00