On Sat, 2017-01-07 at 07:50 -0500, John Szakmeister wrote: > I was perusing StackOverflow this morning and ran across this > question: http://stackoverflow.com/questions/41521143/git-fsck-full-only-checking-directories/ > > It was a simple question about why "checking objects" was not > appearing, but in it was another issue. The user purposefully > corrupted a blob object file to see if `git fsck` would catch it by > tacking extra data on at the end. `git fsck` happily said everything > was okay, but when I played with things locally I found out that `git > gc` does not like that extra garbage. I'm not sure what the trade-off > needs to be here, but my expectation is that if `git fsck` says > everything is okay, then all operations using that object (file) > should work too. > > Is that unreasonable? What would be the impact of fixing this issue? If you do this with a commit object or tree object, fsck does complain. I think it's sensible to do so for blob objects as well. Editing blob object: hurricane:/tmp/moo (master)$ hexer .git/objects/a1/b3ebb97f10ff8d85a9472bcba50cb575dbd485 hurricane:/tmp/moo (master)$ git status On branch master nothing to commit, working tree clean hurricane:/tmp/moo (master)$ git fsck Checking object directories: 100% (256/256), done. hurricane:/tmp/moo (master)$ git gc Counting objects: 3, done. error: garbage at end of loose object 'a1b3ebb97f10ff8d85a9472bcba50cb575dbd485' fatal: loose object a1b3ebb97f10ff8d85a9472bcba50cb575dbd485 (stored in .git/objects/a1/b3ebb97f10ff8d85a9472bcba50cb575dbd485) is corrupt error: failed to run repack Editing tree object: hurricane:/tmp/moo (master)$ hexer .git/objects/d4/eda486f02e3e862e23f6eb3739a25a2ca43f20 hurricane:/tmp/moo (master +)$ git status error: garbage at end of loose object 'd4eda486f02e3e862e23f6eb3739a25a2ca43f20' fatal: loose object d4eda486f02e3e862e23f6eb3739a25a2ca43f20 (stored in .git/objects/d4/eda486f02e3e862e23f6eb3739a25a2ca43f20) is corrupt error: garbage at end of loose object 'd4eda486f02e3e862e23f6eb3739a25a2ca43f20' fatal: loose object d4eda486f02e3e862e23f6eb3739a25a2ca43f20 (stored in .git/objects/d4/eda486f02e3e862e23f6eb3739a25a2ca43f20) is corrupt hurricane:/tmp/moo (master +)$ git fsck error: garbage at end of loose object 'd4eda486f02e3e862e23f6eb3739a25a2ca43f20' fatal: loose object d4eda486f02e3e862e23f6eb3739a25a2ca43f20 (stored in .git/objects/d4/eda486f02e3e862e23f6eb3739a25a2ca43f20) is corrupt error: garbage at end of loose object 'd4eda486f02e3e862e23f6eb3739a25a2ca43f20' fatal: loose object d4eda486f02e3e862e23f6eb3739a25a2ca43f20 (stored in .git/objects/d4/eda486f02e3e862e23f6eb3739a25a2ca43f20) is corrupt Editing commit object: hurricane:/tmp/moo (master)$ echo test >> .git/objects/47/59a693f7e8362c724d3365fe6df398083fafa0 hurricane:/tmp/moo (master +)$ git status error: garbage at end of loose object '4759a693f7e8362c724d3365fe6df398083fafa0' fatal: loose object 4759a693f7e8362c724d3365fe6df398083fafa0 (stored in .git/objects/47/59a693f7e8362c724d3365fe6df398083fafa0) is corrupt error: garbage at end of loose object '4759a693f7e8362c724d3365fe6df398083fafa0' fatal: loose object 4759a693f7e8362c724d3365fe6df398083fafa0 (stored in .git/objects/47/59a693f7e8362c724d3365fe6df398083fafa0) is corrupt !(128) hurricane:/tmp/moo (master +)$ git fsck error: garbage at end of loose object '4759a693f7e8362c724d3365fe6df398083fafa0' fatal: loose object 4759a693f7e8362c724d3365fe6df398083fafa0 (stored in .git/objects/47/59a693f7e8362c724d3365fe6df398083fafa0) is corrupt error: garbage at end of loose object '4759a693f7e8362c724d3365fe6df398083fafa0' fatal: loose object 4759a693f7e8362c724d3365fe6df398083fafa0 (stored in .git/objects/47/59a693f7e8362c724d3365fe6df398083fafa0) is corrupt D.