File tree Expand file tree Collapse file tree 1 file changed +22
-1
lines changed Expand file tree Collapse file tree 1 file changed +22
-1
lines changed Original file line number Diff line number Diff line change @@ -32,13 +32,34 @@ data Component
32
32
parsePackage' :: Text -> Either String Package
33
33
parsePackage' = parseOnly parsePackage
34
34
35
+ -- Skip over entire fields that are known to be free-form. Ensures lines that
36
+ -- look like the beginning of sections/stanzas are not inadvertently intepreted
37
+ -- as such.
38
+ -- List gathered by searching "free text field" in:
39
+ -- https://cabal.readthedocs.io/en/3.4/buildinfo-fields-reference.html
40
+ -- May be subject to change across Cabal versions.
41
+ skipFreeformField :: Parser ()
42
+ skipFreeformField =
43
+ choice $ flip (field 0 ) skipBlock <$>
44
+ [ " author"
45
+ , " bug-reports"
46
+ , " category"
47
+ , " copyright"
48
+ , " description"
49
+ , " homepage"
50
+ , " maintainer"
51
+ , " package-url"
52
+ , " stability"
53
+ , " synopsis"
54
+ ]
55
+
35
56
parsePackage :: Parser Package
36
57
parsePackage =
37
58
( do
38
59
n <- field 0 " name" $ const parseString
39
60
(Package _ t) <- parsePackage
40
61
pure $ Package n t
41
- )
62
+ ) <|> (skipFreeformField >> parsePackage)
42
63
<|> ( do
43
64
h <- parseComponent 0
44
65
(Package n t) <- parsePackage
You can’t perform that action at this time.
0 commit comments