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.hs | |
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.hs')
-rw-r--r-- | Backend.hs | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/Backend.hs b/Backend.hs index f7990c22c..136c2eb7a 100644 --- a/Backend.hs +++ b/Backend.hs @@ -64,7 +64,13 @@ genKey' (b:bs) file = do r <- (B.getKey b) file case r of Nothing -> genKey' bs file - Just k -> return $ Just (k, b) + Just k -> return $ Just (makesane k, b) + where + -- keyNames should not contain newline characters. + makesane k = k { keyName = map fixbadchar (keyName k) } + fixbadchar c + | c == '\n' = '_' + | otherwise = c {- Looks up the key and backend corresponding to an annexed file, - by examining what the file symlinks to. -} |