summaryrefslogtreecommitdiff
path: root/Backend
diff options
context:
space:
mode:
authorGravatar Joey Hess <joey@kitenet.net>2011-12-06 13:02:50 -0400
committerGravatar Joey Hess <joey@kitenet.net>2011-12-06 13:03:09 -0400
commit480495beb4a3422f006ee529df807a20cc944727 (patch)
treef20bb15a91ba0e44e45d2776fc6cdd61e3327d3f /Backend
parentcf5353acb4746cd0c2e736eecd066bd505555af3 (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.hs10
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