metadata: Field names limited to alphanumerics and a few whitelisted punctuation characters to avoid issues with views, etc.

This commit is contained in:
Joey Hess 2014-02-23 13:34:59 -04:00
parent ee8a443d49
commit b437787eee
3 changed files with 20 additions and 8 deletions

View file

@ -115,19 +115,29 @@ instance MetaSerializable CurrentlySet where
deserialize "-" = Just (CurrentlySet False)
deserialize _ = Nothing
{- Fields cannot be empty, contain whitespace, or start with "+-" as
- that would break the serialization. -}
toMetaField :: String -> Maybe MetaField
toMetaField f
| legalField f = Just $ MetaField f
| otherwise = Nothing
{- Fields cannot be empty, contain whitespace, or start with "+-" as
- that would break the serialization.
-
- Additionally, fields should not contain any form of path separator, as
- that would break views.
-
- So, require they have an alphanumeric first letter, with the remainder
- being either alphanumeric or a small set of shitelisted common punctuation.
-}
legalField :: String -> Bool
legalField f
| null f = False
| any isSpace f = False
| any (`isPrefixOf` f) ["+", "-"] = False
| otherwise = True
legalField [] = False
legalField (c1:cs)
| not (isAlphaNum c1) = False
| otherwise = all legalchars cs
where
legalchars c
| isAlphaNum c = True
| otherwise = c `elem` "_-."
toMetaValue :: String -> MetaValue
toMetaValue = MetaValue (CurrentlySet True)

2
debian/changelog vendored
View file

@ -11,6 +11,8 @@ git-annex (5.20140222) UNRELEASED; urgency=medium
tag/showname.
* annex.genmetadata can be set to make git-annex automatically set
metadata (year and month) when adding files.
* metadata: Field names limited to alphanumerics and a few whitelisted
punctuation characters to avoid issues with views, etc.
-- Joey Hess <joeyh@debian.org> Fri, 21 Feb 2014 13:03:04 -0400

View file

@ -19,7 +19,7 @@ fields, which each can have any number of values. For example, to tag
files, the `tag` field is typically used, with values set to each tag that
applies to the file.
The field names are freeform (but cannot include spaces). The metadata
The field names are limited to alphanumerics (and `[_-.]`). The metadata
values can contain absolutely anything you like -- but you're recommended
to keep it simple and reasonably short.