diff options
author | Joey Hess <joey@kitenet.net> | 2011-12-06 13:02:50 -0400 |
---|---|---|
committer | Joey Hess <joey@kitenet.net> | 2011-12-06 13:03:09 -0400 |
commit | 480495beb4a3422f006ee529df807a20cc944727 (patch) | |
tree | f20bb15a91ba0e44e45d2776fc6cdd61e3327d3f /Backend | |
parent | cf5353acb4746cd0c2e736eecd066bd505555af3 (diff) |
Prevent key names from containing newlines.
There are several places where it's assumed a key can be written on one
line. One is in the format of the .git/annex/unused files. The difficult
one is that filenames derived from keys are fed into git cat-file --batch,
which has a line based input. (And no -z option.)
So, for now it's best to block such keys being created.
Diffstat (limited to 'Backend')
-rw-r--r-- | Backend/SHA.hs | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/Backend/SHA.hs b/Backend/SHA.hs index 2ae0cfcf4..7935b6d26 100644 --- a/Backend/SHA.hs +++ b/Backend/SHA.hs @@ -90,10 +90,12 @@ keyValueE size file = keyValue size file >>= maybe (return Nothing) addE , keyBackendName = shaNameE size } naiveextension = takeExtension file - extension = - if length naiveextension > 6 - then "" -- probably not really an extension - else naiveextension + extension + -- long or newline containing extensions are + -- probably not really an extension + | length naiveextension > 6 || + '\n' `elem` naiveextension = "" + | otherwise = naiveextension {- A key's checksum is checked during fsck. -} checkKeyChecksum :: SHASize -> Key -> Annex Bool |