git.iko.soy/typeable/pandoc
on master help sign in
Export 'nested' in Parsing.
167012dJohn MacFarlane
src/Text/Pandoc/Parsing.hs+13
@@ -82,6 +82,7 @@ module Text.Pandoc.Parsing ( (>>~),
82 ellipses,
82 ellipses,
83 apostrophe,
83 apostrophe,
84 dash,
84 dash,
85+ nested,
85 macro,
86 macro,
86 applyMacros',
87 applyMacros',
87 Parser,
88 Parser,
@@ -925,6 +926,18 @@ emDashOld = do
925 try (charOrRef "\8212\151") <|> (try $ string "--" >> optional (char '-') >> return '-')
926 try (charOrRef "\8212\151") <|> (try $ string "--" >> optional (char '-') >> return '-')
926 return (Str "\8212")
927 return (Str "\8212")
927
928
929+-- This is used to prevent exponential blowups for things like:
930+-- a**a*a**a*a**a*a**a*a**a*a**a*a**
931+nested :: Parser s ParserState a
932+ -> Parser s ParserState a
933+nested p = do
934+ nestlevel <- stateMaxNestingLevel `fmap` getState
935+ guard $ nestlevel > 0
936+ updateState $ \st -> st{ stateMaxNestingLevel = stateMaxNestingLevel st - 1 }
937+ res <- p
938+ updateState $ \st -> st{ stateMaxNestingLevel = nestlevel }
939+ return res
940+
928--
941--
929-- Macros
942-- Macros
930--
943--
src/Text/Pandoc/Readers/Markdown.hs−12
@@ -1294,18 +1294,6 @@ inlinesBetween start end =
1294 where inner = innerSpace <|> (notFollowedBy' (() <$ whitespace) >> inline)
1294 where inner = innerSpace <|> (notFollowedBy' (() <$ whitespace) >> inline)
1295 innerSpace = try $ whitespace >>~ notFollowedBy' end
1295 innerSpace = try $ whitespace >>~ notFollowedBy' end
1296
1296
1297−-- This is used to prevent exponential blowups for things like:
1298−-- a**a*a**a*a**a*a**a*a**a*a**a*a**
1299−nested :: Parser [Char] ParserState a
1300− -> Parser [Char] ParserState a
1301−nested p = do
1302− nestlevel <- stateMaxNestingLevel `fmap` getState
1303− guard $ nestlevel > 0
1304− updateState $ \st -> st{ stateMaxNestingLevel = stateMaxNestingLevel st - 1 }
1305− res <- p
1306− updateState $ \st -> st{ stateMaxNestingLevel = nestlevel }
1307− return res
1308−
1309emph :: Parser [Char] ParserState (F Inlines)
1297emph :: Parser [Char] ParserState (F Inlines)
1310emph = fmap B.emph <$> nested
1298emph = fmap B.emph <$> nested
1311 (inlinesBetween starStart starEnd <|> inlinesBetween ulStart ulEnd)
1299 (inlinesBetween starStart starEnd <|> inlinesBetween ulStart ulEnd)