36 lines
		
	
	
	
		
			1.5 KiB
			
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			36 lines
		
	
	
	
		
			1.5 KiB
			
		
	
	
	
		
			Markdown
		
	
	
	
	
	
Wrote some evil code you don't want to run today. Git.Destroyer randomly
 | 
						|
generates Damage, and applies it to a git repository, in a way that is
 | 
						|
reproducible -- applying the same Damage to clones of the same git repo 
 | 
						|
will always yeild the same result.
 | 
						|
 | 
						|
This let me build a test harness for git-repair, which repeatedly clones,
 | 
						|
damages, and repairs a repository. And when it fails, I can just ask it to
 | 
						|
retry after fixing the bug and it'll re-run every attempt it's logged.
 | 
						|
 | 
						|
This is already yeilding improvements to the git-repair code.
 | 
						|
The first randomly constructed Damage that it failed to recover
 | 
						|
turned out to be a truncated index file that hid some other
 | 
						|
corrupted object files from being repaired.
 | 
						|
 | 
						|
	[Damage Empty (FileSelector 1),
 | 
						|
	 Damage Empty (FileSelector 2),
 | 
						|
	 Damage Empty (FileSelector 3),
 | 
						|
	 Damage Reverse (FileSelector 3),
 | 
						|
	 Damage (ScrambleFileMode 3) (FileSelector 5),
 | 
						|
	 Damage Delete (FileSelector 9),
 | 
						|
	 Damage (PrependGarbage "¥SOH¥STX¥ENQ¥f¥a¥ACK¥b¥DLE¥n") (FileSelector 9),
 | 
						|
	 Damage Empty (FileSelector 12),
 | 
						|
	 Damage (CorruptByte 11 25) (FileSelector 6),
 | 
						|
	 Damage Empty (FileSelector 5),
 | 
						|
	 Damage (ScrambleFileMode 4294967281) (FileSelector 14)
 | 
						|
	]
 | 
						|
 | 
						|
I need to improve the ranges of files that it damages -- currently QuickCheck
 | 
						|
seems to only be selecting one of the first 20 or so files. Also, it's quite
 | 
						|
common that it will damage `.git/config` so badly that git thinks it's not
 | 
						|
a git repository anymore. I am not sure if that is something `git-repair`
 | 
						|
should try to deal with.
 | 
						|
 | 
						|
---
 | 
						|
 | 
						|
Today's work was sponsored by the WikiMedia Foundation.
 |